JacksonでJSON文字列を作ってみる

{
 "Age":37,
 "FamilyFirstNames":["Kamisan","Musume","Musuko"],
 "Cats":[{"name":"coco","age":3},{"name":"choco","age":2}],
 "FirstName":"Masahide",
 "LastName":"Takeda"
}
が出力されるサンプル。


MapだろうがListだろうがJavaBeanだろうが意識しないで渡してしまえば
処理してくれる。Jackson便利。

package jp.npinc.jackson.sample;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

/**
 * JACKSONのJSON生成サンプルクラス
 * 
 * @author bose999
 *
 */
public class JSONMaker {
	
	/**
	 * サンプル実行メソッド
	 * Mapに値をセットして、そこからJSONを柔軟に生成する
	 * 
	 * @param args String
	 */
	public static void main(String args[]){
		Map<String,Object> valueMap = new HashMap<String,Object>();
		setValueMap(valueMap);
		String jsonString = makeJSONString(valueMap);
		System.out.println(jsonString);
	}
	
	/**
	 * Mapに値をセットする
	 * 
	 * @param valueMap Map<String, Object>
	 */
	private static void setValueMap(Map<String, Object> valueMap) {
		valueMap.put("FirstName", "Masahide");
		valueMap.put("LastName", "Takeda");
		valueMap.put("Age", Integer.valueOf(37));
		
		List<String> familyFirstNames = new ArrayList<String>();
		familyFirstNames.add("Kamisan");
		familyFirstNames.add("Musume");
		familyFirstNames.add("Musuko");
		valueMap.put("FamilyFirstNames", familyFirstNames);
		
		List<Cat> cats = new ArrayList<Cat>();
		Cat cat = new Cat();
		cat.name = "coco";
		cat.age = 3;
		cats.add(cat);
		cat = new Cat();
		cat.name = "choco";
		cat.age = 2;
		cats.add(cat);
		valueMap.put("Cats", cats);
	}

	/**
	 * MapからJSON文字列を作成する
	 * 
	 * @param valueMap Map<String, Object>
	 * @return String
	 */
	private static String makeJSONString(Map<String,Object> valueMap){
		
		ObjectMapper objectMapper = new ObjectMapper();
		String jsonString = null;
		
		try {
			jsonString = objectMapper.writeValueAsString(valueMap);
		} catch (JsonGenerationException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return jsonString;
	}
	
	/**
	 * 猫クラスだにゃ
	 * 
	 * @author bose999
	 *
	 */
        static class Cat{
		public String name;
		public Integer age;
	}
}