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}

今、上記のid値と値を一致させようとしています。私は別のソースから価値を得ています。値が上記の JSON 文字列の場合、値も である必要があります。また、JSON 文字列では、多くの可能性があるため、すべての値が と一致する必要があります。それらのいずれかが一致しない場合は、例外をログに記録します。userIdJSON Stringidid419userId419userId valuesuserIdid

だから私はこのようなことを試みていました-

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してfalseに設定できます。userId

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 に答える