2015-01-01 5 views
6

मैं जैक्सन फ़ाइलों को पढ़ने और संशोधित करने के लिए जैक्सन का उपयोग कर रहा हूं। बहुत अच्छा काम करता है। हालांकि, यम लिखने के लिए मुझे जादू की जलन की आवश्यकता नहीं है।याम लिखने के लिए जैक्सन का प्रयोग करें?

ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); 
ObjectNode root = (ObjectNode)mapper.readTree(yamlFileIn); 
// modify root here 
mapper.writeValue(yamlFileOut, root); // writes json, not yaml. not sure why. 

मुझे यकीन है कि यह लेखकों, जेसन जेनरेटर और कुछ और का संयोजन है। किसी को नमूना कोड मिला है?

+1

कोड संकेत के रूप में काम करना चाहिए - हो सकता है वहाँ एक बग है। हालिया संस्करण (2.4.4) का उपयोग करना सुनिश्चित करें। यह संभव है कि 'वाईएएमएल फैक्ट्री' में कुछ ओवरराइड गुम हो जाए, जिससे जेएसओएन जनरेटर का आकस्मिक उपयोग हो रहा है। – StaxMan

+0

एफडब्ल्यूआईडब्ल्यू, अंक 12 (https://github.com/FasterXML/jackson-dataformat-yaml/issues/12) जिसे 2.1.3 में तय किया गया था, समस्या का वर्णन हो सकता है। – StaxMan

उत्तर

1

प्रयास करें:

YAMLFactory yf = new YAMLFactory(); 
ObjectMapper mapper = new ObjectMapper(yf); 
ObjectNode root = (ObjectNode) mapper.readTree(yamlFileIn); 
// modify root here  
FileOutputStream fos = new FileOutputStream(yamlFileOut); 
yf.createGenerator(fos).writeObject(root); // works. yay. 
+1

ध्यान दें कि v2.8.3 के साथ यह उत्तर जनरेटर के लिए परिभाषित अपवाद 'नो ऑब्जेक्ट कोडेक' उत्पन्न कर सकता है। मूल्य लिखने के लिए मैपर का उपयोग करना पसंदीदा समाधान प्रतीत होता है। –

+0

@ डेव-जर्विस v2.8.3 के बारे में सही है। यह 'जनरेटर के लिए परिभाषित कोई ऑब्जेक्ट कोडोड' उत्पन्न नहीं करेगा .. अपवाद। – gilbertpilz

+0

@ डेवजर्विस गिल्बर्टपिल्ज़ के उत्तर में इसके लिए फिक्स है: http://stackoverflow.com/a/39732593/467240 – mtyson

3

v2.8.3 के लिए निम्नलिखित काम करना चाहिए:

YAMLFactory yf = new YAMLFactory(); 
ObjectMapper mapper = new ObjectMapper(yf); 
ObjectNode root = (ObjectNode) mapper.readTree(yamlFileIn); 
// modify root here  
FileOutputStream fos = new FileOutputStream(yamlFileOut); 
SequenceWriter sw = mapper.writerWithDefaultPrettyPrinter().writeValues(fos); 
sw.write(root); 
+0

हाँ, यह जैक्सन के हाल के संस्करणों के लिए काम करता है। दूसरा नहीं है। यह बेहतर है, क्योंकि आप पहले से कॉन्फ़िगर किए गए मैपर/यमफैक्टरी का पुन: उपयोग कर सकते हैं यदि आप फ़ाइलों को भी पढ़ रहे हैं। – mtyson

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