Java 使用流式api提取部分json字符串并转换为jsonTree(Jackson)
我有一个嵌套的json结构:Java 使用流式api提取部分json字符串并转换为jsonTree(Jackson),java,json,jackson,jackson-modules,Java,Json,Jackson,Jackson Modules,我有一个嵌套的json结构: "info": [ { "name":"Alice", "phone": [{ "home": "1234567890", "mobile": "0001112223" }] }, { "name":"Bob", "phone": [{ "home": "3456789012",
"info": [
{
"name":"Alice",
"phone": [{
"home": "1234567890",
"mobile": "0001112223"
}]
},
{
"name":"Bob",
"phone": [{
"home": "3456789012",
"mobile": "4445556677"
}]
}
]
我在用杰克逊。
我只想提取有关“Bob”的信息并将其读入树中。我不想把整个结构读入树中(我知道怎么做),然后提取关于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异常,所以我认为这不是解决的办法 这里应该可以使用JSON指针。从功能上讲,将其解读为
JsonNode
,提取可能类似于:
JsonNode stuff = mapper.readTree(source).at("/info/1");
但是,你也可以不通过阅读全部内容而获得它
JsonNode stuff = mapper.reader().at("/info/1").readTree(source);
或者任何你想要的路径表达式。然而,请注意,与XPath(等)不同,您不能使用子树过滤来检查(例如)要读取的对象的“name”属性是否与“Bob”匹配。异常?您不认为该异常的内容可能有用吗?:-)不很高兴听到你的想法…:-)我的意思是,没有例外的信息,就没有办法知道发生了什么。代码看起来是合法的。但我也有更好的编码方法,我会补充一个答案。