निम्नलिखित POJOs को देखते हुए ..जैक्सन के साथ एक फ्लैट JSON ऑब्जेक्ट में एक सूची सामग्री को क्रमबद्ध करने के लिए कैसे?
public class City {
private String title;
private List<Person> people;
}
...
public class Person {
private String name;
private int age;
}
मैं निम्नलिखित उदाहरण के लिए कक्षाओं के Jackson serialize उदाहरणों जाने के लिए JSON चाहते हैं:
{
"title" : "New York",
"personName_1" : "Jane Doe",
"personAge_1" : 42,
"personName_2" : "John Doe",
"personAge_2" : 23
}
जेएसओएन प्रारूप को बाहरी एपीआई द्वारा परिभाषित किया गया है जिसे मैं नहीं बदल सकता।
मैं पहले से ही पता चला है कि मैं इस तरह के रूप में एक कस्टम serializer साथ सूची क्षेत्र टिप्पणी कर सकते हैं:
@JsonSerialize(using = PeopleSerializer.class)
private List<Person> people;
... और यहाँ एक बुनियादी कार्यान्वयन मैंने कोशिश की है:
public class PeopleSerializer extends JsonSerializer<List<Person>> {
private static final int START_INDEX = 1;
@Override
public void serialize(List<Person> people,
JsonGenerator generator,
SerializerProvider provider) throws IOException {
for (int i = 0; i < people.size(); ++i) {
Person person = people.get(i);
int index = i + START_INDEX;
serialize(person, index, generator);
}
}
private void serialize(Person person, int index, JsonGenerator generator) throws IOException {
generator.writeStringField(getIndexedFieldName("personName", index),
person.getName());
generator.writeNumberField(getIndexedFieldName("personAge", index),
person.getAge());
}
private String getIndexedFieldName(String fieldName, int index) {
return fieldName + "_" + index;
}
}
हालांकि, इस एक के साथ विफल:
JsonGenerationException: Can not write a field name, expecting a value
मैं भी जैक्सन के Converter इंटरफेस लेकिन था का उपयोग कर में देखा टी नेस्टेड सूची ऑब्जेक्ट्स को खोलने के लिए उपयुक्त नहीं है।
मैं भी @JsonUnwrapped
के बारे में पता कर रहा हूँ, लेकिन यह सूची के साथ उपयोग के लिए डिज़ाइन नहीं किया गया है।
संबंधित पदों
- Serialize List content in a flat structure in jackson json (Java)
- Jackson: How to add custom property to the JSON without modifying the POJO
- How to serialize only the ID of a child with Jackson
मुझे लगता है कि आप' City' वर्ग के लिए अपने 'JsonSerializer' लिखने के लिए है, यह है फ़ील्ड नाम 'लोग' तो मूल्य लिखने के लिए आपके कस्टम 'JsonSerializer' की अपेक्षा करता है। –
@ug_ मैंने कोशिश की और '@JsonSerialize (= citySerializer.class का उपयोग करके) 'शहर' वर्ग को एनोटेट किया। कस्टम सीरिएलाइज़र के भीतर मैंने उपरोक्त 'पीपुल्सरिएलाइज़र' में किए गए कार्यों के समान ही 'लोगों' फ़ील्ड को क्रमबद्ध किया। Serialization एक ही त्रुटि संदेश के साथ विफल रहता है। – JJD
@JJD - ऑफ-मौके पर एक आसान दृष्टिकोण है, आप जिस मूल समस्या को हल करने की कोशिश कर रहे हैं वह क्या है? मैं ऐसे मामले की कल्पना नहीं कर सकता जहां आपका लक्ष्य JSON संरचना पार्स करना आसान बनाता है ... – AjahnCharles