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,extracting 可能类似于:

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

但是您也可以在不阅读所有内容的情况下获得它

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

或您想要的任何路径表达式。但是请注意,与 XPath(等)不同,您不能使用子树过滤来检查(例如)要读取的 Object 的“name”属性是否与“Bob”匹配。

于 2016-03-30T02:48:47.053 回答