2013-05-20 11 views
7

का उपयोग कर रहा JSON, विभिन्न स्तरों क्षेत्र के साथ है, तो मैं उदाहरण के लिए एक स्तर के साथ क्षेत्रों के साथ एक भी JSON करने के लिए परिवर्तित करना चाहते हैं:Convert JSON एकल JSON करने के लिए कई वस्तुओं जैक्सन

{ 
    "prop1":"value1", 
    "prob2":"value2", 
    "prop3": { 
    "prop4":"value4", 
    "prop5":"value5" 
    } 
    ... many level fields 
} 

परिणाम

{ 
    "prop1":"value1", 
    "prop2":"value2", 
    "prop4":"value4", 
    "prop5":"value5" 
    ....... 
} 

मैं जैक्सन का उपयोग एनोटेशन @JsonProperty("field") के साथ कर रहा हूं, मुझे पहले स्तर के क्षेत्रों में समस्या नहीं है, लेकिन मुझे नहीं पता कि जेएसओएन के अंदर और अधिक क्षेत्र में प्रवेश कैसे करें, इस उदाहरण के लिए prop4 और prop5 हैं।

उत्तर

13

JsonUnwrapped पर अधिक जानकारी का उपयोग करने के लिए एनोटेशन है, यह बहु-स्तर घोंसले के लिए भी काम करता है। उदाहरण के लिए:

@RunWith(JUnit4.class) 
public class Sample { 

    @Test 
    public void testName() throws Exception { 
     SampleClass sample = new SampleClass("value1", "value2", new SubClass("value4", "value5", new SubSubClass("value7"))); 
     new ObjectMapper().writeValue(System.out, sample); 
    } 

    @JsonAutoDetect(fieldVisibility=Visibility.ANY) 
    public static class SampleClass { 
     private String prop1; 
     private String prop2; 
     @JsonUnwrapped 
     private SubClass prop3; 

     public SampleClass(String prop1, String prop2, SubClass prop3) { 
      this.prop1 = prop1; 
      this.prop2 = prop2; 
      this.prop3 = prop3; 
     } 
    } 
    @JsonAutoDetect(fieldVisibility=Visibility.ANY) 
    public static class SubClass { 
     private String prop4; 
     private String prop5; 
     @JsonUnwrapped 
     private SubSubClass prop6; 
     public SubClass(String prop4, String prop5, SubSubClass prop6) { 
      this.prop4 = prop4; 
      this.prop5 = prop5; 
      this.prop6 = prop6; 
     } 

    } 
    @JsonAutoDetect(fieldVisibility=Visibility.ANY) 
    public static class SubSubClass{ 
     private String prop7; 

     public SubSubClass(String prop7) { 
      this.prop7 = prop7; 
     } 
    } 
} 

{"prop1":"value1","prop2":"value2","prop4":"value4","prop5":"value5","prop7":"value7"} 
+0

महान उत्पन्न होगा !!! , जानकारी के लिए बहुत बहुत धन्यवाद, जेसननवार्ड के साथ एक शानदार विकल्प है, लेकिन उल्लिखित अवशोषण के साथ दूसरी कार्यान्वयन कक्षा की आवश्यकता होगी, अगला सवाल मौजूद है, फिर भी सभी अनचाहे जेसन फ़ील्ड उत्पन्न करते हैं, केवल मैपर सुविधाओं को संशोधित करते हैं? – cflores29

+0

यदि आप अपनी मूल कक्षा को संशोधित नहीं करना चाहते हैं, तो आप मिक्सिन तंत्र का उपयोग कर सकते हैं: http://wiki.fasterxml.com/JacksonMixInAnnotations। और नहीं, ऐसी कोई सुविधा नहीं है जिसे आप 'ऑब्जेक्टमैपर' पर सक्रिय कर सकें जो ऐसा करेगा। –

संबंधित मुद्दे