簡體   English   中英

以有效的方式解析JSON字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM