2010-06-05 37 views
10

गुणों का क्रमबद्धीकरण (लिखना) दबाने मैं जैक्सन का उपयोग कर जावा ऑब्जेक्ट को जेएसओएन ऑब्जेक्ट में जेएसओएन ऑब्जेक्ट में बदलने की कोशिश कर रहा हूं। और गतिशील रूप से कुछ गुणों के serialization (लिखना) दबाना चाहते हैं।जैक्सन - गतिशील रूप से

मैं जेसन इग्नोर का उपयोग कर सकता हूं, लेकिन मैं रनटाइम पर अनदेखा निर्णय करना चाहता हूं। कोई विचार??

तो नीचे एक उदाहरण के रूप में, मैं को दबाने के लिए "आईडी" क्षेत्र जब मैं JSON करने के लिए उपयोगकर्ता वस्तु को क्रमानुसार ..

new ObjectMapper.writeValueAsString(user); 


class User { 

private String id = null; 
private String firstName = null; 
private String lastName = null; 

//getters 
//setters 

}//end class 

उत्तर

0

मुझे लगता है कि ऐसा करने का किसी भी तरह से देख नहीं करना चाहती। यदि आपको गतिशील रूप से यह तय करने की आवश्यकता है कि कौन से गुणों को मार्शल किया गया है, तो मेरा सुझाव है कि आप अपनी ऑब्जेक्ट्स के मानों के लिए मैन्युअल रूप से Map कुंजी का निर्माण करें, और फिर User ऑब्जेक्ट को सीधे पास करने के बजाय जैक्सन को Map पास करें।

+0

धन्यवाद। मुझे लगता है कि जेएसओएन सरणी बनाने की बात आती है, तो नक्शा पैटर्न थोड़ा कमजोर भी होता है। मानचित्र <स्ट्रिंग, ऑब्जेक्ट> map1 = नया हैश मैप <स्ट्रिंग, ऑब्जेक्ट>(); map1.put ("fname", "स्टीव"); map1.put ("lname", "colly"); \t \t मानचित्र <स्ट्रिंग, ऑब्जेक्ट> map2 = नया हैश मैप <स्ट्रिंग, ऑब्जेक्ट>(); map2.put ("fname", "जोश"); map2.put ("lname", "roff"); सूची jsonArray = new ArrayList(); jsonArray.add (map1); jsonArray.add (map2); नया ऑब्जेक्टमैपर()। लिखें वैल्यूएस्ट्रिंग (जेसनअरे) ... उत्पादन नहीं करता ??? [{'fname': 'स्टीव', 'lname': 'colly'}, {'fname': 'जोश', 'lname': 'roff'}] – kapso

+0

@ kapil.isr: हाँ यह करता है, मैं बस कोशिश की, यह ठीक काम करता है। चाबियों का क्रम अलग है, लेकिन ऐसा इसलिए है क्योंकि आपने 'LinkedHashMap' की बजाय 'हैश मैप' का उपयोग किया था। – skaffman

+0

ओ हाँ यह काम करता है, माफ करना टाइपो :) बहुत बहुत धन्यवाद !! – kapso

2

चेक

ObjectMapper.configure(SerialiationJson.Feature f, boolean value) 

और

org.codehaus.jackson.annotate.JsonIgnore 

एनोटेशन

यह केवल जब तुम क्रमबद्धता पर आईडी अनदेखी करने के लिए एक खास प्रकार के सभी उदाहरणों चाहते काम करेंगे। यदि आप वास्तव में गतिशील (उर्फ प्रति उदाहरण अनुकूलन) चाहते हैं तो आपको संभावित रूप से जैक्सन लाइब्रेरी को हैक करना होगा।

0

क्या आपने JSON Views का उपयोग करने का प्रयास किया है? दृश्य विभिन्न प्रोफाइल को परिभाषित करने के लिए एनोटेशन-आधारित तंत्र की अनुमति देते हैं, इसलिए यदि आपको अलग-अलग उपयोगकर्ताओं के लिए थोड़ा अलग विचारों की आवश्यकता है, तो यह आपके लिए काम कर सकता है।

4

हां, JSON व्यू जाने का रास्ता है।

यदि आप उदा। ग्राहक को यह तय करने की आवश्यकता है कि कौन से फ़ील्ड मार्शल में हैं, यह उदाहरण मदद कर सकता है: http://svn.codehaus.org/jackson/tags/1.6/1.6.3/src/sample/CustomSerializationView.java

+0

उस लिंक को प्रमाणीकरण की आवश्यकता है – RevanProdigalKnight

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