使用重复键解析Json

时间:2018-05-29 07:45:48

标签: java json jackson

我试图用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",

      }
    }
  }
}

2 个答案:

答案 0 :(得分:1)

来自the JSON specification

  

名字是      串。每个名称后面都有一个冒号,分隔名称      从价值。单个逗号将值与后续值分开      名称。对象中的名称应该是唯一的。

许多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"

      }
    }
  }
}