我试图用Java中的重复键解析嵌套的Json
。我已经解决了其他类似问题,但无法找到解决方案。我尝试了使用Jackson流API的方法,但它只打印第一个键的值并忽略第二个重复键。请帮忙。谢谢。
代码:
public class JacksonJson {
public static void main(String args[]) throws IOException {
/
JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createParser(new File("a.json"));
parser.nextToken();
while (parser.nextToken() != JsonToken.END_OBJECT) { //loop until "}"
String fieldName = parser.getCurrentName();
if (fieldName.equals("A")) {
parser.nextToken();
System.out.println("Value : " + parser.getText());
}
/*else { // unexpected token, generate error
throw new IOException("Unrecognized field '"+fieldName+"'");
}*/
}
parser.close();
}
}
Json文件:
{
"Data": {
"C": {
"S": {
"M": {},
"A": "first"
}
},
"C": {
"S": {
"M": {}
"A": "Second",
}
}
}
}
答案 0 :(得分:1)
名字是 串。每个名称后面都有一个冒号,分隔名称 从价值。单个逗号将值与后续值分开 名称。对象中的名称应该是唯一的。
许多JSON库提供将json映射到对象的功能。想一想,如果这些名字不是唯一的话,它们应该如何运作呢?
当然,您可以尝试自己解析它并在内部将其重命名为C1,C2,......但是更容易禁止此类情况。
答案 1 :(得分:0)
使用以下代码从重复条目中获取json值。
public static void main(String args[]) throws IOException {
JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createJsonParser(new File("src/a.json"));
parser.nextToken();
int count=0;
while (parser.nextToken() != JsonToken.NOT_AVAILABLE) { //loop until "}"
String fieldName = parser.getCurrentName();
if(fieldName==null){
break;
}
if(fieldName.equals("C")&&parser.getText().equals("C")){
count++;
}
if (fieldName.equals("A")) {
parser.nextToken();
System.out.println("Value : " + parser.getText());
}
}
System.out.println(count);
parser.close();
}
此外,您的json字符串无效。使用以下有效字符串
{
"Data": {
"C": {
"S": {
"M": {},
"A": "first"
}
},
"C": {
"S": {
"M": {},
"A": "Second"
}
}
}
}