0

私はJSON文字列を持っています-

[{"lv":[{"v":{"nt":"10;1341943000000","userId":622},"cn":0},
{"v":{"nt":"20;1234567890123","userId":622},"cn":0},
]

このJSON文字列ではuserId、各値のプロパティとして使用します。単一のJSON文字列に10個のuserIdプロパティまたは15個のuserIdプロパティがある可能性があります。そして、userId常にいくつかの数があります。

各JSON文字列の番号は同じになりuserIdます。上記のJSON文字列が表示622された場合、それぞれの番号として私が持っていますuserId

今、私はJSON文字列でidと比較しようとしています。userId私はこのidような他の手段から価値を得ています-

final int id = generateRandomId(random);

したがって、値は単一のJSON文字列内のidすべてのプロパティと一致する必要があります。userId

そして、すべてのJSON文字列をに保存していますcolData List<String>。そして現在、私はクラスのメソッドiduserId使用して一致させようとしていますが、これは正しくないと思います。一致するものが1つ見つかるとすぐに、条件が真になる場合(どちらが間違っているか)です。containsString

Single JSON String 20 userId propertiesaにあり、19 userId values一致しているidが、1つのuserIdプロパティ値が同じではない可能性があります。そのため、以下のコードではユースケースが失敗します。では、どうすればこの問題の定義を達成できますか

for (String str : colData) {

   if (!str.contains(String.valueOf(id))) {

// log the exception here
handleException(ReadConstants.ID_MISMATCH, Read.flagTerminate);

   }
}

助けてくれてありがとう。

4

1 に答える 1

2

1 つのアプローチは、Matcher を使用することです

public class Uid {
    private static final Pattern USER_ID_PATTERN = Pattern.compile("userId\":\\d+");
    private static final String GENERATED_USER_ID = "userId\":622";
    public static void main(String[] args) {

        List<String> jsonData = new ArrayList<String>();
        jsonData.add("[{\"lv\":[{\"v\":{\"nt\":\"10;1341943000000\",\"userId\":621},\"cn\":0},{\"v\":{\"nt\":\"20;1234567890123\",\"userId\":622},\"cn\":0},]"); // this string contains multiple uids

        for (String s : jsonData) {
            Matcher matcher = USER_ID_PATTERN.matcher(s);
            while (matcher.find()) {
                String currentUid = matcher.group();
                 if (!currentUid.equals(GENERATED_USER_ID))
                    System.out.println("LOG exception, " + currentUid + " doesn't exists");

            }
        }
    }
}
于 2013-03-02T22:03:22.117 に答える