मान लीजिए मैं निम्नलिखित तीन वर्गों (getters और setters संक्षिप्तता के लिए बाहर छोड़ दिया) हैजैक्सन जेएसओएन जेनरेटर का उपयोग करके, मैं एक क्षेत्र में कई ऑब्जेक्ट्स कैसे लिख सकता हूं?
{
"allInfo":{
"fieldA":"foo",
"fieldB":"bar"
}
}
:
@JsonAutoDetect
public class InfoCollection{
private InfoType1 info1;
private InfoType2 info2;
}
@JsonAutoDetect
public class InfoType1{
private String fieldA;
}
@JsonAutoDetect
public class InfoType2{
private String fieldB;
}
मैं "मी एक JsonSerializer.serialize()
समारोह है कि इस प्रारूप में एक InfoCollection
वस्तु को धारावाहिक लिखने की कोशिश कर
यह वही है मैं अब है:
jsonGenerator.writeStartObject();
jsonGenerator.writeFieldName("allInfo");
jsonGenerator.writeObject(myInfoCollection.getInfo1());
jsonGenerator.writeObject(myInfoCollection.getInfo2());
jsonGenerator.writeEndObject();
जो निम्न अपवाद उत्पन्न कर रहा है:
org.codehaus.jackson.JsonGenerationException: Can not start an object, expecting field name
क्या मुझे कुछ छोटा याद आ रहा है या क्या मैं पूरी तरह गलत तरीके से इस बारे में जा रहा हूं?
नोट: प्रस्तावित समाधान के एक जोड़े को अब तक InfoType1
और InfoType2
के प्रत्येक व्यक्ति के क्षेत्र लेखन शामिल है। मैं ऐसे समाधान की तलाश में हूं जिसके लिए इसकी आवश्यकता नहीं है क्योंकि मैं कई क्षेत्रों के साथ विशाल वर्गों पर समाधान का उपयोग करना चाहता हूं।
यह विधि शायद काम करेगी, लेकिन यह मुझे प्रत्येक व्यक्तिगत क्षेत्र लिख रही है। मैं एक समाधान के साथ आने की कोशिश कर रहा हूं कि मैं उन बड़े वर्गों पर लागू हो सकता हूं जिनमें कई और क्षेत्र हैं। –
फ़ील्ड का पता लगाने के लिए प्रतिबिंब और एनोटेशन का उपयोग करें ताकि आप अपने जेनरेटर को कुछ सहायक तरीके/कक्षाओं से लिख सकें जो आपको कोड का पुन: उपयोग करने की अनुमति देते हैं। –
वैकल्पिक रूप से, एक रैपर क्लास बनाएं जो आपको एक एपीआई देता है जो जैक्सन को आउटपुट के करीब है। –