我想在json下解析。这必须告诉我错误的json格式错误。但是游标只解析json直到“value:15”并且没有抛出任何异常。我怎样才能做到这一点?
import org.codehaus.jackson.map.ObjectMapper;
ObjectMapper mapper = new ObjectMapper();
mapper.readTree(json); //this line is not throwing me any exception
我正在使用的示例代码:
import org.codehaus.jackson.map.ObjectMapper;
public class JsonTestParse {
public static void main(String[] args) {
String json = "{ \"and\" : [{\"key\": \"domain\", \"op\": \"=\", \"value\": \"cricket\"}, {\"key\" : \"STAT_CDE\",\"op\" : \"=\",\"value\" : \"13\"}]},"+
"{ \"and\" : [{\"key\": \"domain\", \"op\": \"=\", \"value\": \"Football\"}, {\"key\" : \"STAT_CDE\",\"op\" : \"=\",\"value\" : \"10\"}]}";
System.out.println("json: " + json);
ObjectMapper mapper = new ObjectMapper();
try {
mapper.readTree(json);
} catch (Exception e) {
System.out.println("object mapper exp");
}
System.out.println("mapper complete");
}
}
以下是代码段:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
输出:
第1行:json:{“和”:[{“key”:“domain”,“op”:“=”,“value”:“cricket”},{“key”:“STAT_CDE”,“ op“:”=“,”value“:”13“}]},{”和“:[{”key“:”domain“,”op“:”=“,”value“:”Football“}, {“key”:“STAT_CDE”,“op”:“=”,“value”:“10”}]} 第2行:mapper完成
答案 0 :(得分:1)
问题是json格式没有问题!从语法上讲,您将逗号分隔的列表分配给json
,这是完全有效的代码 - 它会将json
设置为列表中的第一项,而不会对其余值执行任何操作。
代码执行后,json
如下所示:
String json = { and : [{key: domain, value: cricket}, {key : STAT_CDE,value : 15}]}
这个值完全被忽略了:
{ and : [{key: domain, value: football}, {key : STAT_CDE,value : 10}]}
如您所见,json
的结构非常完美。
此外,您似乎期待一个String
对象,但您提供的是地图。
尝试以下方法:
String json = "{ and : [{key: domain, value: cricket}, {key : STAT_CDE,value : 15}]}, { and : [{key: domain, value: football}, {key : STAT_CDE,value : 10}]}"
然后解析json
。这肯定会失败,因为密钥没有用双引号括起来("
字符),这是json格式的要求。
要及时了解问题:
这是你说你正在使用的json的格式化视图:
{
"and" : [
{"key": "domain", "op": "=", "value": "cricket"},
{"key" : "STAT_CDE","op" : "=","value" : "15"}
]
},
{
"and" : [
{"key": "domain", "op": "=", "value": "football"},
{"key" : "STAT_CDE","op" : "=","value" : "10"}
]
}
问题是这不是一个json对象 - 它是两个单独的json对象,每个对象都是格式良好的。我猜测ObjectMapper
解析一个完整的json结构,并忽略任何尾随数据而不会抛出错误。
如果你想在json中捕获整个结构,你需要将它们放在一起,可能使用数组:
[
{
"and" : [
{"key": "domain", "op": "=", "value": "cricket"},
{"key" : "STAT_CDE","op" : "=","value" : "15"}
]
},
{
"and" : [
{"key": "domain", "op": "=", "value": "football"},
{"key" : "STAT_CDE","op" : "=","value" : "10"}
]
}
]