Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用流式api提取部分json字符串并转换为jsonTree(Jackson)_Java_Json_Jackson_Jackson Modules - Fatal编程技术网

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

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",

我有一个嵌套的json结构:

"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”匹配。

异常?您不认为该异常的内容可能有用吗?:-)不很高兴听到你的想法…:-)我的意思是,没有例外的信息,就没有办法知道发生了什么。代码看起来是合法的。但我也有更好的编码方法,我会补充一个答案。