【问题标题】:Gson deserialize json of embedded memberGson反序列化嵌入成员的json
【发布时间】:2014-09-10 14:31:55
【问题描述】:

我有以下示例 JSON:

{
 "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 字符串并只获取“着名的 ID”成员的值。

我查看了其他答案,看来我绝对需要为此创建类。

是否可以在不映射 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 的字符串值,以及我当前的类结构有什么不正确的?

【问题讨论】:

    标签: java json serialization gson deserialization


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多