1

在我下面的代码中,colDatastores 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}

现在我正在尝试将idvalue 与userId上面的 value 匹配JSON String。我id从不同的来源获得价值。这意味着如果id419在上面的 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方法中,我重复了一些我不应该做的事情。如果我错过了什么,谁能帮助我如何让这个更干净。我将能够学到更多的东西。谢谢您的帮助

4

1 回答 1

3

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;
}

这样,只有当所有元素都有效时,您才遍历所有数组的元素,这是您实际必须这样做的唯一情况。

于 2013-03-03T20:28:39.907 回答