gpt4 book ai didi

java - 在不知道 JSON 格式的情况下用 Java 解析 JSON

转载 作者:IT老高 更新时间:2023-10-28 12:45:29 27 4
gpt4 key购买 nike

我正在尝试在 Java 中解析 JSON 字符串并找到键值对,以便我可以确定 JSON 对象的大致结构,因为 JSON 字符串的对象结构是未知的。

例如,一个执行可能有一个像这样的 JSON 字符串:

  {"id" : 12345, "days" : [ "Monday", "Wednesday" ], "person" : { "firstName" : "David", "lastName" : "Menoyo" } }

还有一个这样的:

  {"url" : "http://someurl.com", "method" : "POST", "isauth" : false }

如何循环浏览各种 JSON 元素并确定键及其值?我查看了 jackson-coreJsonParser .我知道如何获取下一个“ token ”并确定它是什么类型的 token (即字段名称、值、数组开始等),但是,我不知道如何获取实际 token 的值。

例如:

public void parse(String json)  {
try {
JsonFactory f = new JsonFactory();
JsonParser parser = f.createParser(json);
JsonToken token = parser.nextToken();
while (token != null) {
if (token.equals(JsonToken.START_ARRAY)) {
logger.debug("Start Array : " + token.toString());
} else if (token.equals(JsonToken.END_ARRAY)) {
logger.debug("End Array : " + token.toString());
} else if (token.equals(JsonToken.START_OBJECT)) {
logger.debug("Start Object : " + token.toString());
} else if (token.equals(JsonToken.END_OBJECT)) {
logger.debug("End Object : " + token.toString());
} else if (token.equals(JsonToken.FIELD_NAME)) {
logger.debug("Field Name : " + token.toString());
} else if (token.equals(JsonToken.VALUE_FALSE)) {
logger.debug("Value False : " + token.toString());
} else if (token.equals(JsonToken.VALUE_NULL)) {
logger.debug("Value Null : " + token.toString());
} else if (token.equals(JsonToken.VALUE_NUMBER_FLOAT)) {
logger.debug("Value Number Float : " + token.toString());
} else if (token.equals(JsonToken.VALUE_NUMBER_INT)) {
logger.debug("Value Number Int : " + token.toString());
} else if (token.equals(JsonToken.VALUE_STRING)) {
logger.debug("Value String : " + token.toString());
} else if (token.equals(JsonToken.VALUE_TRUE)) {
logger.debug("Value True : " + token.toString());
} else {
logger.debug("Something else : " + token.toString());
}
token = parser.nextToken();
}
} catch (Exception e) {
logger.error("", e);
}
}

jackson 或其他一些库(gsonsimple-json)中是否有一个类可以生成一棵树,或者允许一个类循环遍历 json 元素并获取除值之外的实际键名?

最佳答案

看看Jacksons built-in tree model feature .

您的代码将是:

public void parse(String json)  {
JsonFactory factory = new JsonFactory();

ObjectMapper mapper = new ObjectMapper(factory);
JsonNode rootNode = mapper.readTree(json);

Iterator<Map.Entry<String,JsonNode>> fieldsIterator = rootNode.fields();
while (fieldsIterator.hasNext()) {

Map.Entry<String,JsonNode> field = fieldsIterator.next();
System.out.println("Key: " + field.getKey() + "\tValue:" + field.getValue());
}
}

关于java - 在不知道 JSON 格式的情况下用 Java 解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19760138/

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