2

ネストされたjson構造があります:

"info": [
       {
        "name":"Alice",
        "phone": [{
            "home": "1234567890",
            "mobile": "0001112223"
        }]
    },
    {
        "name":"Bob",
        "phone": [{
            "home": "3456789012",
            "mobile": "4445556677"
        }]
    }
]

ジャクソンを使用しています。「Bob」に関する情報のみを抽出してツリーに読み込みたいだけです。構造全体をツリーに読み込んで (その方法は知っています)、ボブに関する情報を抽出したくありませんストリーミング API (JsonParser) を使用して、まず "Bob" ですべての情報を抽出し、それを jsontree にします。

私はそれをバイト配列に読み込んでから、それを次のようにツリーに変換すると思いました:

JsonToken token = null;
byte[] data;
int i = 0;

while( jParser.nextToken()!=JsonToken.END_ARRAY) {
    data[i] = jParser.getByteValue();
    i ++;
}
JsonNode node = null;
ObjectMapper objectMapper = new ObjectMapper();

try {
    node = objectMapper.readValue(jParser, JsonNode.class);
    }
catch(Exception e) {
    e.printStackTrace();
}

ただし、これは私が望む結果を返していません。jsonParse 例外があるので、これは行くべき道ではないと思います。

4

1 に答える 1

1

JSON ポインターの使用はここで機能するはずです。機能的には、 として読むとJsonNode、抽出は次のようになります。

JsonNode stuff = mapper.readTree(source).at("/info/1");

しかし、すべてを読まずに取得することもできます

JsonNode stuff = mapper.reader().at("/info/1").readTree(source);

または任意のパス式。ただし、XPath (その他) とは異なり、サブツリーのフィルタリングを使用して、たとえば、読み取るオブジェクトの「name」プロパティが「Bob」と一致することを確認できないことに注意してください。

于 2016-03-30T02:48:47.053 に答える