JavaオブジェクトをJSONに変換する/JSONから変換する方法(Jackson)
このチュートリアルでは、ジャクソン1.xのデータバインディングを使用してJavaオブジェクトをJSONに変換する方法を説明します。
1.クイックリファレンス
1.1 JavaオブジェクトをJSON、 `writeValue(…)`に変換する
ObjectMapper mapper = new ObjectMapper(); User user = new User(); //Object to JSON in file mapper.writeValue(new File("c:\\user.json"), user); //Object to JSON in String String jsonInString = mapper.writeValueAsString(user);
1.2 JSONをJavaオブジェクトの `readValue(…)`に変換する
ObjectMapper mapper = new ObjectMapper(); String jsonInString = "{'name' : 'mkyong'}"; //JSON from file to Object User user = mapper.readValue(new File("c:\\user.json"), User.class); //JSON from String to Object User user = mapper.readValue(jsonInString, User.class);
P.Sすべてのサンプルは、Jackson 1.9.13
2.ジャクソンの依存関係
Jackson 1.xの場合、6つの別々のjarファイルがあり、ほとんどの場合 `jackson-mapper-asl`が必要です。
pom.xml
<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency>
3. POJO(古いJavaオブジェクト)
テスト用のUserオブジェクト。
User.java
package com.mkyong.json; import java.util.List; public class User { private String name; private int age; private List<String> messages; //getters and setters }
4. JavaオブジェクトからJSONへ
`user`オブジェクトをJSON形式の文字列に変換します。
JacksonExample.java
package com.mkyong.json; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; public class JacksonExample { public static void main(String[]args) { ObjectMapper mapper = new ObjectMapper(); //For testing User user = createDummyUser(); try { //Convert object to JSON string and save into file directly mapper.writeValue(new File("D:\\user.json"), user); //Convert object to JSON string String jsonInString = mapper.writeValueAsString(user); System.out.println(jsonInString); //Convert object to JSON string and pretty print jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user); System.out.println(jsonInString); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static User createDummyUser(){ User user = new User(); user.setName("mkyong"); user.setAge(33); List<String> msg = new ArrayList<>(); msg.add("hello jackson 1"); msg.add("hello jackson 2"); msg.add("hello jackson 3"); user.setMessages(msg); return user; } }
出力
….//new json file is created in D:\\user.json”
{“name”:”mkyong”,”age”:33,”messages”:[“hello jackson 1″,”hello jackson 2″,”hello jackson 3”]}
{
“name” : “mkyong”,
“age” : 33,
“messages” :[“hello jackson 1”, “hello jackson 2”, “hello jackson 3”]}
=== JSONからJavaオブジェクトへ JSON文字列を読み込んでJavaオブジェクトに変換し直します。 JacksonExample.java
package com.mkyong.json;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
public class JacksonExample {
public static void main(String[]args) {
ObjectMapper mapper = new ObjectMapper();
try {
//Convert JSON string from file to Object User user = mapper.readValue(new File("G:\\user.json"), User.class); System.out.println(user);
//Convert JSON string to Object String jsonInString = "{\"age\":33,\"messages\":[\"msg 1\",\"msg 2\"],\"name\":\"mkyong\"}"; User user1 = mapper.readValue(jsonInString, User.class); System.out.println(user1);
} catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
}
}
出力
User[name=mkyong, age=33, messages=[hello jackson 1, hello jackson 2, hello jackson 3]]
User[name=mkyong, age=33, messages=[msg 1, msg 2]]….
6. @JsonView
`@ JsonView`はバージョン1.4からJacksonでサポートされています。表示するフィールドを制御することができます。
6.1シンプルなクラス。
Views.java
package com.mkyong.json; public class Views { public static class NameOnly{}; public static class AgeAndName extends NameOnly{}; }
6.2表示したいフィールドに注釈をつける。
User.java
package com.mkyong.json; import java.util.List; import org.codehaus.jackson.map.annotate.JsonView; public class User { @JsonView(Views.NameOnly.class) private String name; @JsonView(Views.AgeAndName.class) private int age; private List<String> messages; //getter and setters }
6.3 writerWithView()を介して `@ JsonView`を有効にします。
JacksonExample.java
package com.mkyong.json; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializationConfig; public class JacksonExample { public static void main(String[]args) { ObjectMapper mapper = new ObjectMapper(); //By default all fields without explicit view definition are included, disable this mapper.configure(SerializationConfig.Feature.DEFAULT__VIEW__INCLUSION, false); //For testing User user = createDummyUser(); try { //display name only String jsonInString = mapper.writerWithView(Views.NameOnly.class).writeValueAsString(user); System.out.println(jsonInString); //display namd ana age jsonInString = mapper.writerWithView(Views.AgeAndName.class).writeValueAsString(user); System.out.println(jsonInString); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static User createDummyUser(){ User user = new User(); user.setName("mkyong"); user.setAge(33); List<String> msg = new ArrayList<>(); msg.add("hello jackson 1"); msg.add("hello jackson 2"); msg.add("hello jackson 3"); user.setMessages(msg); return user; } }
出力
{"name":"mkyong"} {"name":"mkyong","age":33}
参考文献
-
リンク://java/how-do-convert-java-object-to-from-json-format-gson-api/[Gson
-
JavaオブジェクトをJSONに変換する/JSONから変換する]
-