将String与JSON String属性进行比较

时间:2013-03-02 20:47:41

标签: java json string

我有一个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字符串中将iduserId进行比较。我从其他方式获得id价值,比如这个 -

final int id = generateRandomId(random);

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

我将所有JSON字符串存储在colData List<String>中。目前我正在尝试使用id使用userIdcontains方法匹配String,我认为这种方法不正确,因为只要它找到一个匹配项,那么条件就是条件会变成现实(这是错误的)。

有可能在Single JSON String 20 userId properties中,19 userId valuesid匹配,但一个userId属性值不相同。因此,在我的下面的代码中,用例将失败。那么我该如何实现这个问题定义

for (String str : colData) {

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

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

   }
}

感谢您的帮助。

1 个答案:

答案 0 :(得分: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");

            }
        }
    }
}