使用GSon进行自定义映射

时间:2015-10-30 10:20:36

标签: android json gson

有没有办法将嵌套的json对象映射到单个Java类? 例如,我有这个json字符串:

{
  "order_id": 104,
  "order_details" : [
    {
      "name": "Product#1",
      "price": {
        "usd": 12.95
      }
    }
  ]
}

我想用这个类映射:

public class Order{
   Int id; // rename
   String name; //map with order_details.name
   float price; //map with order_details.price.usd
}

*更新: 对不起,问题不明确。我是Objective-C和Java的开发人员。当我在ObjC中使用JSONModel时,可以很容易地配置这样的映射:https://github.com/icanzilb/JSONModel#key-mapping

我讨厌使用getJSONObject()getString()手动解析JSON,...我找到了一种配置方法,可以使用Gson自动解析Java。

2 个答案:

答案 0 :(得分:0)

Ofcourse。您可以使用 GSON 库来完成此操作。你需要创建2个pojo,而外面的那个可以有自定义模型。

答案 1 :(得分:0)

您可以尝试修改模型:

public class Order {

    int id; // rename
    String name; //map with order_details.name
    float price; //map with order_details.price.usd

    public void parce(String json) {
        try {
            JSONObject jsonObject = new JSONObject(json);
            id = jsonObject.getInt("order_id");
            name = jsonObject.getJSONArray("order_details").getJSONObject(0).getString("name");
            price = (float) jsonObject.getJSONArray("order_details").getJSONObject(0).getJSONObject("price").getDouble("usd");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

使用此代码的示例:

Order order = new Order();
order.parce("{\"order_id\":104,\"order_details\":[{\"name\":\"Product#1\",\"price\":{\"usd\":12.95}}]}");

结果:

Result