用流api提取部分json字符串并转换为jsonTree(Jackson)

时间:2016-03-01 22:20:42

标签: java json jackson jackson-modules

我有一个嵌套的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异常,所以我认为这不是一条路。

1 个答案:

答案 0 :(得分:1)

使用JSON指针应该在这里工作。在功能上,将其读作update(),extracing可能看起来像:

JsonNode

但是你也可以在没有阅读

的情况下获得它
JsonNode stuff = mapper.readTree(source).at("/info/1");

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