2014-07-08 8 views
6

कनवर्ट करने के लिए जैक्सन का उपयोग करते समय एक वैकल्पिक संपत्ति को अनदेखा किया जा सकता है, मैं जैक्सन 1.9.2 (org.codehaus.jackson) का उपयोग जावा ऑब्जेक्ट से जेएसओएन निर्माण से मेल खाने के लिए कर रहा हूं। यहां मेरा जावा ऑब्जेक्ट है:जावा ऑब्जेक्ट

Class ColorLight { 
    String type; 
    boolean isOn; 
    String value; 

    public String getType(){ 
     return type; 
    } 

    public setType(String type) { 
     this.type = type; 
    } 

    public boolean getIsOn(){ 
     return isOn; 
    } 

    public setIsOn(boolean isOn) { 
     this.isOn = isOn; 
    } 

    public String getValue(){ 
     return value; 
    } 

    public setValue(String value) { 
     this.value = value; 
    } 
} 

यदि मैंने निम्नलिखित रूपांतरण किया है, तो मुझे परिणाम मिल जाएगा।

ColorLight light = new ColorLight(); 
light.setType("red"); 
light.setIsOn("true"); 
light.setValue("255"); 
objectMapper mapper = new ObjectMapper(); 
jsonString = mapper.writeValueAsString(); 

jsonString जैसा होगा:

{"type":"red","isOn":"true", "value":"255"} 

लेकिन कभी कभी मैं ison संपत्ति

ColorLight light = new ColorLight(); 
light.setType("red"); 
light.setValue("255"); 

का मूल्य नहीं है लेकिन jsonString अब भी है की तरह है:

{"type":"red","isOn":"false", "value":"255"} 

जहां "isOn: false" defa है जावा बूलियन प्रकार का अंतिम मूल्य जो मैं नहीं चाहता कि यह वहां हो। इस तरह के अंतिम जेसन निर्माण में IOn संपत्ति को मैं कैसे हटा सकता हूं?

{"type":"red","value":"255"} 

उत्तर

6

आप मूल्य अगर यह मौजूद नहीं है छोड़ने के लिए चाहते हैं, तो आपको आदिम है, जो हमेशा या तो true या false का अपना महत्व होता है के बजाय Boolean आवरण वर्ग का उपयोग करना होगा, और आप ' जैक्सन को @JsonInclude(Include.NON_NULL) के साथ नल को क्रमबद्ध करने की आवश्यकता नहीं होगी।

+2

आपको बहुत बहुत धन्यवाद, बूलियन आवरण वर्ग हल

यहाँ एक उदाहरण है। @JsonInclude (Include.NON_NULL) मेरे जैक्सन संस्करण के लिए काम नहीं किया। आखिरकार मैंने @ जेसन सेरियललाइज का उपयोग किया (शामिल = जेसनएसरियलइज.इन्यूलेशन.NON_NULL) – taoxiaopang

5

आप अपनी कक्षा को 0xके साथ 1.x एनोटेशन में चिह्नित कर सकते हैं जो इंगित करता है कि केवल वे गुण हैं जिनके पास डिफ़ॉल्ट सेटिंग्स से भिन्न मान हैं (जिसका मतलब है कि बीन का निर्माण उनके नो-तर्क कन्स्ट्रक्टर के साथ किया गया है) ।

@JsonInclude(JsonInclude.Include.NON_DEFAULT) एनोटेशन संस्करण 2.x के लिए उपयोग किया जाता है।

public class JacksonInclusion { 

    @JsonSerialize(include = JsonSerialize.Inclusion.NON_DEFAULT) 
    public static class ColorLight { 
     public String type; 
     public boolean isOn; 

     public ColorLight() { 
     } 

     public ColorLight(String type, boolean isOn) { 
      this.type = type; 
      this.isOn = isOn; 
     } 
    } 

    public static void main(String[] args) throws IOException { 
     ColorLight light = new ColorLight("value", false); 
     ObjectMapper mapper = new ObjectMapper(); 
     System.out.println(mapper.writeValueAsString(light)); 
    } 
} 

आउटपुट:: मेरे मुद्दा

{"type":"value"} 
संबंधित मुद्दे