在我的下面的代码中,colData
存储JSON String
。 colData的示例示例 -
{" LV":[{" V" {" tenureSiteReg":空," bghtItms":48,&#34 ; pnlValue":105.478409," byrSgmnt":2" cstmrId":" 814296998"" slrRevRnk": - 99.0,& #34; soldItms":0," slrSgmnt":6," byrRevRnk":0.013," mainAcct":78," GMV&#34 ;:0.0" cstmrRevRnk":0.021," pnlRev":313.438843," cstmrSgmnt":51," GMB":4674.76&# 34; totalVal":142.536293,"用户id":493}" CN" 42}]," LMD":20130}
现在,我尝试将id
值与上述userId
中的JSON String
值进行匹配。
如果id
值为493
,则表示上述JSON字符串userId
值也应为493
。在JSON字符串中,有可能存在大量userId values
,因此所有userId
值都应与id
匹配。如果他们中的任何一个没有匹配,那么记录异常。
所以我在尝试这样的事情 -
private static final Pattern USER_ID_PATTERN = Pattern.compile("userId:\\d+");
for (String str : colData) {
Matcher matcher = USER_ID_PATTERN.matcher(str);
while (matcher.find()) {
if (!matcher.group().equals("userId:"+id))
System.out.println("LOG exception");
}
}
但是对于上面的JSON字符串,它也不会进入while loop
。有什么我想念的吗?
答案 0 :(得分:2)
与评论中提到的Hot Lips一样,你应该真正使用JSON处理器。
以下是使用Jackson JSON Processor的基本示例。我假设id
是一个单独的字符串,因为我没有在JSON中看到它。
import java.io.IOException;
import java.util.List;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.ObjectMapper;
class Test {
public static void main(String[] args) {
String json = "{\"lv\":[{\"v\":{\"tenureSiteReg\":null,\"bghtItms\":48," +
"\"pnlValue\":105.478409,\"byrSgmnt\":2,\"cstmrId\":\"814296998\",\"slrRevRnk\":-99.0," +
"\"soldItms\":0,\"slrSgmnt\":6,\"byrRevRnk\":0.013,\"mainAcct\":78,\"gmv\":0.0," +
"\"cstmrRevRnk\":0.021,\"pnlRev\":313.438843,\"cstmrSgmnt\":51,\"gmb\":4674.76," +
"\"totalVal\":142.536293,\"userId\":493},\"cn\":42}],\"lmd\":20130}";
String id = "493";
ObjectMapper mapper = new ObjectMapper();
try {
JsonNode rootNode = mapper.readTree(json);
List<JsonNode> userIds = rootNode.findValues("userId");
for (JsonNode node : userIds)
{
if (!id.equals(node.toString())) {
System.out.println("Log exception: id "+id+" != userId "+node);
break;
} else {
System.out.println("Congratulations! id "+id+" = userId "+node);
}
}
} catch (JsonProcessingException e) {
System.out.println("JsonProcessingException: ");
e.printStackTrace();
} catch (IOException e) {
System.out.println("IOException: ");
e.printStackTrace();
}
}
}
运行此类会产生:
Congratulations! id 493 = userId 493
答案 1 :(得分:0)
也许你只是错过了双引号?
"userId:"493
试试这个模式:
"userId\":(\\d+)"
同样,你需要在matcher.group()里面的\“。equals(..)