JavaはJSON文字列とオブジェクトの変換を実装します
表示する前のヒント:
この記事で使用されているIDEAバージョンは究極の2019.1であり、JDKバージョンは1.8.0_141です。
1. Jackon ObjectMapper
参照関連のjarパッケージ
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.2</version>
</dependency>
エンティティPerson.java
package testJsonToEntity;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonPropertyOrder(value = {
"ID","name","age"})
@JsonIgnoreProperties(ignoreUnknown = true)
public class Person {
@JsonProperty("ID")
private String id;
@JsonInclude(JsonInclude.Include.NON_NULL)
private String name;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
注:
-
@JsonPropertyOrderこの注釈は、プロパティを並べ替えるために使用されます。
-
@JsonIgnoreProperties(ignoreUnknown = true)、クラスにこの注釈を書き込んだ後、クラスに存在しないフィールドは無視されます。
-
@JsonPropertyこの注釈はプロパティで使用され、その役割は、trueNameプロパティをnameにシリアル化するなど、プロパティの名前を別の名前にシリアル化することです。
-
@JsonInclude(Include.NON_NULL)の役割:jacksonエンティティがjsonをNULLに変換するフィールドは、シリアル化に参加しません(つまり、表示されません)。
テストクラスTest.java
package testJsonToEntity;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Test {
private static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws Exception {
Person p = new Person();
p.setId("1111");
p.setAge(18);
String jsonStr = mapper.writeValueAsString(p);
System.out.println(jsonStr);
String json = "{\"Id\":\"1111\",\"age\":18,\"sex\":\"male\"}";
Person p1 = mapper.readValue(json, Person.class);
System.out.println(p1.toString());
}
}
結果は