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比较。userIdid从其他方式获得价值,比如这样-

final int id = generateRandomId(random);

所以id值应该与userId单个 JSON 字符串中的所有属性匹配。

我将所有 JSON 字符串存储在colData List<String>. 目前我正在尝试使用类的方法进行匹配iduserIdcontains认为String这是不正确的,因为一旦找到一个匹配项,那么条件就会变为真(这是错误的)。

可能Single JSON String 20 userId properties存在并且19 userId values匹配id但一个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

一种方法是使用 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 回答