[英]Parse the JSON String efficiently and in a clean way
在我的下面的代码中, 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}
现在我试图在上面的JSON String
匹配id
值和userId
值。 我从不同的来源获得id
值。 意思是如果id
值是419
那么在上面的JSON字符串中userId
值也应该是419
。 在JSON字符串中,可能有很多userId values
因此所有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;
}
这样,只有在所有数组元素都有效时才迭代遍历所有数组元素,这是您实际需要的唯一情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.