我有一个嵌套的json结构:
"info": [
{
"name":"Alice",
"phone": [{
"home": "1234567890",
"mobile": "0001112223"
}]
},
{
"name":"Bob",
"phone": [{
"home": "3456789012",
"mobile": "4445556677"
}]
}
]
我使用杰克逊。 我只想提取有关" Bob"的信息。并将其读入树中。我不想要将整个结构读入树中(我知道该怎么做),然后在Bob上提取信息。我想使用流API(JsonParser)首先使用" Bob"提取所有信息。然后把它变成jsreeree。
我以为我把它读成一个字节数组,然后把它转换成一个像这样的树:
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异常,所以我认为这不是一条路。
答案 0 :(得分:1)
使用JSON指针应该在这里工作。在功能上,将其读作update()
,extracing可能看起来像:
JsonNode
但是你也可以在没有阅读
的情况下获得它JsonNode stuff = mapper.readTree(source).at("/info/1");
或您想要的任何路径表达式。但请注意,与XPath(等)不同,您不能使用子树过滤来检查(例如)要读取的Object的“name”属性是否匹配“Bob”。