gpt4 book ai didi

java - 高效且干净地解析 JSON 字符串

转载 作者:行者123 更新时间:2023-11-29 05:47:45 24 4
gpt4 key购买 nike

在我下面的代码中,colData 存储 JSON String。 colData 示例示例-

{"lv":[{"v":{"price":70.0,"userId":419},"cn":3},
{"v":{"price":149.99,"userId":419},"cn":3},
{"v":{"price":54.95,"userId":419},"cn":3}],
"lmd":20130206212543}

现在我尝试将 id 值与上述 JSON String 中的 userId 值匹配。我从不同来源获取 id 值。意思是如果 id 值为 419 那么在上面的 JSON 字符串中 userId 值也应该是 419。在 JSON 字符串中,可能有很多 userId 值,因此所有 userId 值都应该与 id 匹配。如果其中任何一个不匹配,则记录异常。

所以我正在尝试这样的事情-

final int id = generateRandomId(random);

for (String str : colData) {
if (!isJSONValid(str, id)) {
// log the exception here
LOG.error("Invalid JSON String " +str+ "with id" +id);
}
}

public boolean isJSONValid(final String str, final int id) {
boolean valid = false;
try {
final JSONObject obj = new JSONObject(str);
final JSONArray geodata = obj.getJSONArray("lv");
final int n = geodata.length();

for (int i = 0; i < n; ++i) {
final JSONObject person = geodata.getJSONObject(i);
JSONObject menu = person.getJSONObject("v");
if(menu.getInt("userId") == id) {
valid = true;
}
}
} catch (JSONException ex) {
valid = false;
}
return valid;
}

根据我的理解,我似乎可以使 isJSONValid 方法更简洁。在我上面的 isJSONValid 方法中,我重复了一些我不应该做的事情。如果我遗漏了什么,谁能帮我弄清楚如何使它更清洁。我将能够学到更多的东西。感谢您的帮助

最佳答案

你可以初始化valid = true,当你发现一个无效的userId并立即失败时将它设置为false:

public boolean isJSONValid(final String str, final int id) {
boolean valid = true;
try {
final JSONObject obj = new JSONObject(str);
final JSONArray geodata = obj.getJSONArray("lv");
final int n = geodata.length();

for (int i = 0; i < n; ++i) {
final JSONObject person = geodata.getJSONObject(i);
JSONObject menu = person.getJSONObject("v");
if(menu.getInt("userId") != id) {
valid = false;
break;
}
}
} catch (JSONException ex) {
valid = false;
}
return valid;
}

通过这种方式,您仅在所有元素都有效时才遍历所有数组元素,这是您实际必须这样做的唯一情况。

关于java - 高效且干净地解析 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15190304/

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