간단한 문제 일 것이라고 생각했습니다.개체 목록 (Java, JSON/Jackson)이 포함 된 개체를 JSON 마샬링/언 마샬링
"SimplePerson"개체 목록이 포함 된 "Persons"클래스는 간단한 구조입니다. Persons.java은 다음과 같습니다
package jsontests;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName;
@JsonRootName (value="persons")
public class Persons {
@JsonProperty("person")
private List< SimplePerson> l;
public Persons(List<SimplePerson> pl) {
this.l = pl;
}
public Persons() {
this.l = new ArrayList<>();
}
public List<SimplePerson> getL() {
return this.l;
}
public void setL(List<SimplePerson> l) {
this.l = l;
}
}
그리고 "SimplePerson.java"는 다음과 같습니다
package jsontests;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class JsonListTest {
public static void main(String[] args) {
JsonListTest var = new JsonListTest();
var.run();
}
private void run() {
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
Persons cl = new Persons();
SimplePerson first = new SimplePerson();
first.setName("Schmidt");
first.setFirstname("Peter");
cl.getL().add(first);
SimplePerson second = new SimplePerson();
second.setName("Smith");
second.setFirstname("George");
cl.getL().add(second);
String s = null;
try {
s = mapper.writeValueAsString(cl);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
System.out.println(s);
}
}
:
package jsontests;
import com.fasterxml.jackson.annotation.JsonRootName;
@JsonRootName (value="person")
public class SimplePerson {
String name;
String firstname;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the firstname
*/
public String getFirstname() {
return firstname;
}
/**
* @param firstname the firstname to set
*/
public void setFirstname(String firstname) {
this.firstname = firstname;
}
}
내가 그 개체와 마샬을 만들려면이 코드 조각을 사용
결과는 예상대로 :
{
"persons" : {
"person" : [ {
"name" : "Schmidt",
"firstname" : "Peter"
}, {
"name" : "Smith",
"firstname" : "George"
} ]
}
}
내 마음에 그것은 "우리는 사람이라고 불리는 물건을 가진 사람이라고 불리는 물건이 있습니다. 이 person-object에는 이름/이름 쌍으로 이루어진 객체의 배열이 들어 있습니다. "이 모든 것이 완전히 나와 맞습니다. 코드는 정확히 무엇입니까
불행히도 costumer에서받은 것은 약간 다릅니다.
{
"persons": [
{
"person": {
"name" : "Schmidt",
"firstname": "Peter"
}
},{
"person": {
"name" : "Smith",
"firstname": "George"
}
}
]
}
제 생각에는 이것은 약간 다른 것을 읽습니다. "우리는 사람이라고 불리는 객체를 가지고 있으며 여기에는 배열이 포함되어 있습니다. 이 배열의 첫 번째와 두 번째 요소는 person이라는 객체이며 이름/이름 쌍으로 구성됩니다.
동일하지만 다르지만 :-) 내가 입력 한 내용을 사용하는 방법을 찾기 위해 하루를 보냈습니다. 성공하지 못했습니다. 클래스 구조를 변경하는 데는 아무런 문제가 없습니다. 다른 JSON을 제공하도록 costumer를 설득 할 수있는 아주 작은 기회가 있습니다.
아이디어가 있으십니까? 감사!
json 데이터가 있으면 pojo를 매우 쉽게 만들 수 있습니다. -http : //www.jsonschema2pojo.org/ –
Persons 개체에서 루트 이름을 제거하고 목록 이름을 "persons"로 변경 한 다음 alwaysWrap을 true로 설정합니다 SimplePerson의 루트 이름 주석에서 마침내 랩퍼 루트 값 기능을 사용하지 않도록 설정하십시오. 이렇게하면 다음과 같이 말할 수 있습니다. "강력하게 형식이 지정된" "사람"(유형?) 개체가 포함 된 "인물"이라는 컬렉션 유형 속성을 가진 개체 ... " – Zsolt
@Derick - 덕분에 많이 - 정말 도움이되었습니다. . – Ishiido