在我下面的代碼,colData
店JSON String
。對於colData-解析JSON字符串有效和清潔的方式
{"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
方法中,我重複了一些我不應該做的事情。任何人都可以幫我解決如何讓這個更清潔,如果我錯過了什麼。我將能夠學到更多的東西。感謝您的幫助
你只需要一個匹配,使之好,還是隻有一個錯配,使之壞?如果前者,設置後的「break」有效爲true。如果是後者,你需要在第一次設置無效後反轉有效(和if測試)和「break」。 – 2013-03-03 20:25:18
一旦發現任何不匹配,我需要記錄異常。我對你所描述的方式感到困惑。你能用例子來解釋嗎?謝謝您的幫助。 – AKIWEB 2013-03-03 20:27:22
想想吧 - 如果你需要的一切匹配,那麼第一個*匹配*意味着你可以退出並報告「壞」。如果你一直通過它是「好」。 – 2013-03-03 21:28:44