2014-09-10 53 views
0

的JSON我有下面的示例JSON:GSON反序列化内嵌构件

{ 
"birds":[ 
    { 
    "id":"SAMPLEID", 
    "isTest":true, 
    "externalId":{ 
     "Main":[ 
      "123ABC" 
     ], 
     "Sub":[ 
      "456" 
     ] 
    }, 
    "dinos":[ 

    ], 
    "rhinos":[ 
     { 
      "id":"SUPER100ID", 
      "isTest":true, 
      "externalId":{ 
       "famousId":[ 
       "23|45" 
       ] 
      }, 
      "dinos":[ 

      ], 
      "pelicans":[ 
       { 
       "id":"D4CLIK", 
       "isTest":true, 
       "bird":null, 
       "crazyArray":[ 

       ] 
       }, 
       { 
       "id":"DID123", 
       "type":"B", 
       "name":"TONIE", 
       "isTest":true, 
       "bird":null, 
       "subspecies":[ 

       ] 
       } 
      ] 
     } 
    ] 
    } 
], 
"metaData":{ 
    "count":1 
} 
} 

我想用GSON反序列化这个JSON字符串并获得“famousId”仅成员的值。

我看过其他答案,似乎我绝对需要为此创建类。

是否有可能反序列化这个没有映射POJO,使用JsonParser,JsonElement,JsonArray等?我尝试了几个这样的组合,但没有成功。

我也尝试下面的代码,但预期它也不能正常工作:

JsonObject o = new JsonParser().parse(jsonResponseString).getAsJsonObject(); 

Gson gson = new Gson(); 
enterprises ent = new enterprises(); 
ent = gson.fromJson(o, enterprises.class); 


@Getter 
@Setter 
class birds { 
    @JsonProperty("rhinos") 
    List<Rhino> rhinos = new ArrayList<Rhino>(); 
} 

@Getter 
@Setter 
class Rhino { 
    @JsonProperty("externalId") 
    ExternalId externalId; 
} 

@Getter 
@Setter 
@JsonPropertyOrder({ 
    "famousId" 
    }) 
class ExternalId { 
    @JsonProperty("famousId") 
    List<String> famousId = new ArrayList<String>(); 
} 

不幸的是这也不管用,所以我想一个问题的两个部分...它可以简单地反序列化并得到我想要的famousId的字符串值,以及我目前的类结构有什么不正确的地方?

回答

1

你已经差不多完成了。我为你的json结构添加了一个根类(Enterprises)。下面的代码

class Enterprises { 
    List<Birds> birds; 
} 

class Birds { 
    List<Rhino> rhinos; 
} 

class Rhino { 
    ExternalId externalId; 
} 

class ExternalId { 
    List<String> famousId; 
} 

运行:

JsonObject o = new JsonParser().parse(jsonResponseString).getAsJsonObject(); 
Gson gson = new Gson(); 

Enterprises enterprises = gson.fromJson(o, Enterprises.class); 
System.out.println("famousId:" + enterprises.birds.get(0).rhinos.get(0).externalId.famousId.get(0)); 

输出:

famousId:23|45 

或者,如果你不想使用POJO类:

JsonObject o = new JsonParser().parse(jsonResponseString).getAsJsonObject(); 
JsonArray birdsJsonArray = (JsonArray) o.get("birds"); 
JsonArray rhinosJsonArray = (JsonArray)((JsonObject)(birdsJsonArray.get(0))).get("rhinos"); 
JsonObject externalIdJsonObject = (JsonObject)((JsonObject)(rhinosJsonArray.get(0))).get("externalId"); 
JsonArray famousIdJsonArray = (JsonArray)externalIdJsonObject.get("famousId"); 

System.out.println("famousId:" + famousIdJsonArray.get(0)); 

输出:

famousId:23|45 
+0

+1不错的答案。 – 2014-09-20 13:32:21