Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析嵌套JSON_Java_Json_Jackson - Fatal编程技术网

Java 解析嵌套JSON

Java 解析嵌套JSON,java,json,jackson,Java,Json,Jackson,我有以下JSON: { "registration": { "name": "Vik Kumar", "first_name": "Vik", "last_name": "Kumar", "bloodGroup": "B-", "gender": "male", "birthday": "10\/31\/1983", "email": "vik.ceo\u0040gmail.com", "cellPhone": "1234123

我有以下JSON:

{
  "registration": {
    "name": "Vik Kumar",
    "first_name": "Vik",
    "last_name": "Kumar",
    "bloodGroup": "B-",
    "gender": "male",
    "birthday": "10\/31\/1983",
    "email": "vik.ceo\u0040gmail.com",
    "cellPhone": "1234123456",
    "homePhone": "1234123457",
    "officePhone": "1234123458",
    "primaryAddress": "jdfjfgj",
    "area": "jfdjdfj",
    "location": {
      "name": "Redwood Shores, California",
      "id": 103107903062719
    },
    "subscribe": true,
    "eyePledge": false,
    "reference": "fgfgfgfg"
  }
}
我使用以下代码对其进行解析:

JsonNode json = new ObjectMapper().readTree(jsonString);
JsonNode registration_fields = json.get("registration");

Iterator<String> fieldNames = registration_fields.getFieldNames();
while(fieldNames.hasNext()){
    String fieldName = fieldNames.next();
    String fieldValue = registration_fields.get(fieldName).asText();
    System.out.println(fieldName+" : "+fieldValue);
}
JsonNode json=newObjectMapper().readTree(jsonString);
JsonNode registration_fields=json.get(“注册”);
迭代器fieldNames=注册_fields.getFieldNames();
while(fieldNames.hasNext()){
字符串fieldName=fieldNames.next();
String fieldValue=registration_fields.get(fieldName.asText();
System.out.println(fieldName+“:”+fieldValue);
}

这可以很好地工作,它可以打印除位置以外的所有值,位置是另一种嵌套级别。我尝试了与上面代码相同的技巧来传递json.get(“location”),但这不起作用。请建议如何使其适用于位置。

当您使用
JsonNode#isObject
处理(嵌套的)
对象时,需要检测:

public static void printAll(JsonNode node) {
     Iterator<String> fieldNames = node.getFieldNames();
     while(fieldNames.hasNext()){
         String fieldName = fieldNames.next();
         JsonNode fieldValue = node.get(fieldName);
         if (fieldValue.isObject()) {
            System.out.println(fieldName + " :");
            printAll(fieldValue);
         } else {
            String value = fieldValue.asText();
            System.out.println(fieldName + " : " + value);
         }
     }
}

由于
位置
嵌套在
注册
中,因此需要使用:

registration_fields.get("location");

去拿。但是while循环是否已经处理了它,为什么需要单独获取它呢?

您所说的“不工作”是什么意思,是否收到错误消息?如果是这样的话,它会说什么?只是为了澄清一下,上面的代码工作得很好。但当我尝试对location字段应用相同的逻辑时,行location_fields.getFieldNames()抛出空指针异常。我确信我在第一行传递了正确的名称“location”。他想打印
location
的内容。因为它是一个对象,所以它的文本值将为空。是的,但在这种情况下,我如何获得这些值?当前代码行字符串fieldValue=registration\u fields.get(fieldName).asText()打印blanknode。getFieldNames()不可用。是否改为使用node.fieldNames()?
registration_fields.get("location");