2017-09-29 34 views
0

考慮例如:如何通過jackson JsonGenerator內聯對象?

import com.fasterxml.jackson.core.JsonFactory; 
import com.fasterxml.jackson.core.JsonGenerator; 

import java.io.File; 
import java.io.FileInputStream; 

public class Exmaple { 
    public static void main (String[] args) throws Exception { 

     Object object = new Object() { 
      private String id = "someId"; 
     }; 

     final JsonGenerator generator = new JsonFactory().createGenerator(System.out); 
     generator.writeStartObject(); 
     generator.writeFieldName("data"); 
     generator.writeBinary(new FileInputStream(new File("D:\\!Temp\\elasticsearch\\pdf.pdf")), -1); 
     generator.writeEndObject(); 
     generator.writeObject(object); 
     generator.close(); 
    } 
} 

目標是JSON流期間object添加所有領域。與該代碼我:

{ 
    "data": "JVBERi0xLjMKJ=" 
} { 
    "id": "someId", 
} 

如何告訴jackson不要再寫從對象{}

修訂

的exprected結果(如data +從Java對象中的所有鍵):

{ 
    "data": "JVBERi0xLjMKJ=", 
    "id": "someId", 
} 
+0

你舉了一個你不想要的數據的例子(兩個對象,這使得完美的意義是臨時的這是因爲你編寫代碼來生成兩個對象)。那麼你需要什麼樣的數據呢?舉一個例子。 – Gimby

+0

已更新問題 – Cherry

+0

您始終可以使用ObjectMapper來保證。 – Antoniossss

回答

0

只是不叫writeEndObject()你叫writeBinary後,它應該看起來像:

final JsonGenerator generator = new JsonFactory().createGenerator(System.out); 
     generator.writeStartObject(); 
     generator.writeFieldName("data"); 
     generator.writeBinary(new FileInputStream(new File("D:\\!Temp\\elasticsearch\\pdf.pdf")), -1); 
     generator.writeObject(object); 
     generator.writeEndObject(); 
     generator.close(); 
+0

您忘記了調用'writeEndObject()' – Nico

+0

謝謝。更新迴應。 – Chris

+0

它導致沒有字段名稱的插入對象。例如。在previuos對象內插入'{}'brase。 – Cherry