Jackson でオブジェクトを JSON に変換
Jackson Java JSON-processor を使ってみます。
1. jar の取得
取得するのは
- jackson-annotations-2.x.x.jar
- jackson-core-2.x.x.jar
- jackson-databind-2.x.x.jar
※今回は2.2.3
http://wiki.fasterxml.com/JacksonDownload
ここからダウンロード
2. 取得した jar をクラスパスに追加
3. こんな感じで使えます
// JSONの文字列に変換するオブジェクト Person person = new Person("ジャクソン", 28, children); // 変換 ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(person);
これだけでオブジェクトをJSONの文字列にしてくれます。
出力結果はこんな感じ
{"name":"ジャクソン","age":28,"children":[{"name":"太郎","age":12,"children":null},{"name":"花子","age":10,"children":null}]}
Listも処理してくれてます。
でもnull値なんとかしたいですね。
ちなみに
String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(person);
こうするとインデントをつけてくれます。
出力結果はこんな感じになります。
{ "name" : "ジャクソン", "age" : 28, "children" : [ { "name" : "太郎", "age" : 12, "children" : null }, { "name" : "花子", "age" : 10, "children" : null } ] }
以下、全ソース
package sample; import java.util.ArrayList; import java.util.List; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) { Person son = new Person("太郎", 12); Person daughter = new Person("花子", 10); List<Person> children = new ArrayList<Person>(); children.add(son); children.add(daughter); Person person = new Person("ジャクソン", 28, children); ObjectMapper objectMapper = new ObjectMapper(); try { String json = objectMapper.writeValueAsString(person); System.out.println(json); } catch (JsonProcessingException e) { e.printStackTrace(); } } public static class Person { public String name; public int age; public List<Person> children; Person(String name, int age) { this.name = name; this.age = age; } Person(String name, int age, List<Person> children) { this(name, age); this.children = children; } } }