我有一个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);
因此id
值应与单个JSON字符串中的所有userId
属性匹配。
我将所有JSON字符串存储在colData
List<String>
中。目前我正在尝试使用id
使用userId
类contains
方法匹配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);
}
}
感谢您的帮助。
答案 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");
}
}
}
}