7

私は次の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);
}

これは正常に機能し、別のレベルのネストである場所を除くすべての値を出力します。上記のコードと同じトリックを試してjson.get( "location")を渡しましたが、機能しません。場所のためにそれを機能させる方法を提案してください。

4

2 に答える 2

15

Objectを使用して(ネストされた)を処理しているときを検出する必要があります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);
         }
     }
}

したがって、などのオブジェクトに到達すると、再帰的にlocation呼び出して、そのすべての内部値を出力します。printAll

org.codehaus.jackson.JsonNode json = new ObjectMapper().readTree(jsonString);
org.codehaus.jackson.JsonNode registration_fields = json.get("registration");
printAll(registration_fields);
于 2012-09-15T01:05:48.157 に答える
1

locationは内にネストされているためregistration、次を使用する必要があります。

registration_fields.get("location");

それを得るために。しかし、それはすでにwhileループによって処理されていないので、なぜ個別に取得する必要があるのでしょうか。

于 2012-09-15T01:05:50.933 に答える