2016-04-23 25 views
1

JSONArrayをジャックObjectNodeに挿入しようとしました。これは私が何をしようとしていますものです: org.json.JSONArrayをjacksonに挿入ObjectNode

public void myMethod(JSONArray jsonArray) { 
    ObjectNode payload = objectMapper.createObjectNode(0); 
    payload.put("array", /* jsonArray */); 
    payload.put(/* some other things */); 
    ... 
} 

それは本当に愚かなもののように感じているが、実際にそれを行うための最善の方法は何か。

EDIT:申し訳ありませんが重要な点は言及していませんでした。それはputPOJO()を使用してObjectNodeを一度完成させるとシリアル化する必要があります。

+0

'payload.put( "アレイ"、jsonArray.toString())パッティングの何が問題になっています;'を? – aribeiro

+0

json配列ではなく文字列として '' array "'フィールドの中に入れるだけですか? –

+0

正確に。 JSONArrayの文字列表現を格納します。 – aribeiro

答えて

3

私はaribeiroの方が好きです。これを行うにはputPOJO()メソッドを使用できます。たとえば:

// Incoming org.json.JSONArray. 
JSONArray incomingArray = new JSONArray("[\"Value1\",\"Value2\"]"); 

ObjectMapper objectMapper = new ObjectMapper(); 
ObjectNode payload = objectMapper.createObjectNode(); 
// Adds the JSONArray node to the payload as POJO (plain old Java object). 
payload.putPOJO("array", incomingArray); 

System.out.println(objectMapper.writeValueAsString(payload)); 

Javadocはhereを見つけることができます。

注:ここで私はreadTree()を使用して提出した以前の実装だ:

// Incoming org.json.JSONArray. 
JSONArray incomingArray = new JSONArray("[\"Value1\",\"Value2\"]"); 

ObjectMapper objectMapper = new ObjectMapper(); 
ObjectNode payload = objectMapper.createObjectNode(); 
// Reads the JSON array into a Jackson JsonNode. 
JsonNode jsonNode = objectMapper.readTree(incomingArray.toString()); 
// Sets the Jackson node on the payload. 
payload.set("array", jsonNode); 

System.out.println(objectMapper.writeValueAsString(payload)); 
+0

実際にこのメソッドを使用すると、例外クラス 'org.json.JSONArray'のシリアライザが見つかりません。問題は、私がそれを直列化しなければならないペイロードを構築し終わったことです。私は正しい答えは前に与えたものだと思います。 –

+0

@MatteoZaccagnino: '' putPOJO() ''には何の問題もありませんでしたが、他の人にも同様の問題が発生した場合に備えて、 '' readTree() ''の実装を投稿しました。 – ck1

+0

'putPOJO()'を使って、作成した 'ObjectNode'をシリアル化しようとすると、' JSONArray'のインスタンスを直列化する方法がjacksonにはわからないので、上記例外が発生します。とにかく、両方のsoutionsが含まれているので、私はあなたの答えをマークした。 –

関連する問題