2017-03-03 35 views
3

私は、Jacksonライブラリを使用して重複キーを持つ無効な構造を持つjsonを解析しようとしています。 jsonに重複キーがある場合は、Collectionとして抽出したいと思います。重複するキーを含むjsonを解析する

{ 
    "a": "a", 
    "a": { 
     "b": { 

     }, 
     "b": true 
    } 
} 

しかし、このJSON重複キー、唯一の最後を持っているので:私は(私が解析しようとしている実際のJSONがWireshark JSONの輸出から来ている)を解析しようとしているものの

例値が保持されます:

JsonNode tree = new ObjectMapper().readTree(json); 
System.out.println(tree); // {"a":{"b":true}} 

は、私はまた、ネストされたJSONオブジェクトのために期待されるようしかし、それは動作しません、MultimapサポートしているGuavaモジュールを試してみました。私はJacksonライブラリを使用してこの問題に取り組む必要がありますどのように

ObjectMapper mapper = new ObjectMapper(); 
mapper.registerModule(new GuavaModule()); 
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); 

Multimap read = mapper.readValue(json, Multimap.class); 
System.out.println(read); // {a=[a, {b=true}]} 

:私は前に示されているJSONのためグアバモジュールを使用して

例? javaのようなjson構造の構文解析をサポートする他のライブラリはありますか?

+1

net.sf.json.JSONObject: {"a":["a",{"b":[{},true]}]} com.fasterxml.jackson.databind.JsonNode{"a":["a",{"b":[{},true]}]} 

Mavenの依存関係の解析ライブラリは道あなたに動作してはならないので、有効なJSONには、重複キーを持っていません'asking again' –

+0

SyntaxError:3行目で重複するキー 'a' –

答えて

3

jsonライブラリを使用している場合は、net.sf.json.JSONObjectを使用できます。

このライブラリは、重複した値を配列に格納して保持します。複数の同じキーが利用可能な場合は、1つのキーを作成してすべての値をArrayとして作成します。

また、コーディング部分も単なる1行です。 net.sf.json.JSONObjectを使ってjsonを解析すると、これをjacksonライブラリに渡すことができます。

JSONObject jsonObject = JSONObject.fromObject("{ \"a\": \"a\", \"a\": { \"b\": {},\"b\": true}}"); 

System.out.println("net.sf.json.JSONObject: " + jsonObject); 

JsonNode jsonNode = new ObjectMapper().readTree(jsonObject.toString()); 

System.out.println("com.fasterxml.jackson.databind.JsonNode" + jsonNode); 

出力:net.sf.json

<dependency> 
    <groupId>net.sf.json-lib</groupId> 
    <artifactId>json-lib</artifactId> 
    <version>2.4</version> 
    <classifier>jdk15</classifier> 
</dependency> 
+0

重複を削除し、配列ではなく単一のオブジェクトとして保持する方法はありますか? –

+0

@AtulSoman不可ただし、重複するキーを使用している限りです。 –

2

"jackson"ライブラリを使ってjsonメッセージトークンをトークンでストリーミングで読むことができます。その後、メッセージを何も食べません。

+0

私は信じています唯一の実行可能なアプローチであることも帽子にこの回答にはいくつかの情報があります:http://stackoverflow.com/a/25426227/13075 – Henrik

関連する問題