gpt4 book ai didi

java - 使用 Jackson 解析器获取整个 JSON 对象

转载 作者:行者123 更新时间:2023-12-01 15:13:16 25 4
gpt4 key购买 nike

有了 GSON,我可以写这个

JsonStreamParser parser = new JsonStreamParser(reader);
System.out.println(parser.next());

如果流由 JSON 对象组成,它会将整个对象作为字符串打印出来。

是否有一种简单的方法可以使用 Jackson 来做到这一点,或者我是否需要使用我在示例中看到的 while 循环模式?

如果第一个对象是:{ “id”:1, “名称”:“富”, “价格”:123, “标签”:[“酒吧”,“伊克”], “库存”: { “仓库”:300, “零售”:20 }}

打印的第一行是:

{"id": 1,"name": "Foo","price": 123,"tags": [ "Bar", "Eek"],"stock": {"warehouse": 300,"零售”:20}}

最佳答案

在流模式下,每个 JSON“字符串”都被视为单个 token ,并且每个 token 都将被增量处理,这就是为什么我们称之为“增量模式”。例如,

{
"name":"mkyong"
}
Token 1 = “{“
Token 2 = “name”
Token 3 = “mkyong”
Token 4 = “}”

您可以编写以下代码来解析上面的json文本

import java.io.File;
import java.io.IOException;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonToken;
import org.codehaus.jackson.map.JsonMappingException;

public class JacksonStreamExample {
public static void main(String[] args) {

try {

JsonFactory jfactory = new JsonFactory();

/*** read from file ***/
JsonParser jParser = jfactory.createJsonParser(new File("c:\\user.json"));

// loop until token equal to "}"
while (jParser.nextToken() != JsonToken.END_OBJECT) {

String fieldname = jParser.getCurrentName();
if ("name".equals(fieldname)) {

// current token is "name",
// move to next, which is "name"'s value
jParser.nextToken();
System.out.println(jParser.getText()); // display mkyong

}

if ("age".equals(fieldname)) {

// current token is "age",
// move to next, which is "name"'s value
jParser.nextToken();
System.out.println(jParser.getIntValue()); // display 29

}

if ("messages".equals(fieldname)) {

jParser.nextToken(); // current token is "[", move next

// messages is array, loop until token equal to "]"
while (jParser.nextToken() != JsonToken.END_ARRAY) {

// display msg1, msg2, msg3
System.out.println(jParser.getText());

}

}

}
jParser.close();

} catch (JsonGenerationException e) {

e.printStackTrace();

} catch (JsonMappingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

Output

mkyong 29

msg 1

msg 2

msg 3

关于java - 使用 Jackson 解析器获取整个 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com