2015-01-01 22 views
6

Yaml dosyalarını okumak ve değiştirmek için Jackson kullanıyorum. Harika çalışıyor. Yine de, yaml yazmak için gerekli olan sihir kabiliyetlerini bulamıyorum.yaml yazmak için Jackson kullanın?

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. 

Eminim bu, yazarların, JsonGeneratorların ve başka bir şeyin birleşiminden oluşuyordur. Örnek kod olan var mı?

+1

çalışması gerekir belirtildiği gibi kod - belki bir hata var. Son sürümü kullandığınızdan emin olun (2.4.4). 'YAMLFactory', JSON jeneratörünün yanlışlıkla kullanılmasına neden olarak bazı geçersiz kılmaları eksik olabilir. – StaxMan

+0

FWIW, 2.1.3'te açıklanan 12 (https://github.com/FasterXML/jackson-dataformat-yaml/issues/12) sorunu açıklanabilir. – StaxMan

cevap

1

Dene: Aşağıdaki v2.8.3 için

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 ile bu cevabın 'jeneratörü için tanımlanan 'ObjectCodec yok' istisnasını oluşturabileceğini unutmayın. Değeri yazmak için eşleştiriciyi kullanmak tercih edilen çözüm gibi görünüyor. –

+0

@ dave-jarvis v2.8.3 hakkında doğrudur. Bu 'jeneratör için tanımlanan ObjectCodec yok ..' istisnasını üretecektir. – gilbertpilz

+0

@DaveJarvis gilbertpilz'in yanıtı bunun için bir düzeltme ekledi: http://stackoverflow.com/a/39732593/467240 – mtyson

3

çalışması gerekir:

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

Evet, bu Jackson'ın son sürümleri için çalışıyor. Diğeri yok. Üstündür, çünkü dosyaları okuyorsanız zaten yapılandırılmış mapper/yamlfactory'yi yeniden kullanabilirsiniz. – mtyson