【问题标题】:Custom mapping with GSon使用 Gson 的自定义映射
【发布时间】:2015-11-01 12:37:39
【问题描述】:

有没有办法将嵌套的 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。

【问题讨论】:

标签: android json gson


【解决方案1】:

当然。您可以使用 GSON 库来实现。您需要装箱 2 个 pojo,外面的一个可以有自定义模型。

【讨论】:

    【解决方案2】:

    您可以尝试像这样修改您的模型:

    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}}]}");
    

    结果:

    【讨论】:

    • 您的解决方案似乎没有使用 Gson for Java?
    猜你喜欢
    • 1970-01-01
    • 2015-11-15
    • 2015-10-20
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多