【问题标题】:Adding changes to the JSON structure向 JSON 结构添加更改
【发布时间】:2019-10-08 16:05:46
【问题描述】:

我有以下 JSON,在 Android 应用程序中生成:

{
  "Details": {
    "ClaimDate": "08/10/2019",
    "HFCode": "55555"
  },
  "Items": [
    {
      "Item": {
        "ItemCode": "Y203",
        "ItemPrice": "20",
        "ItemQuantity": "1"
      }
    }
  ],
  "Services": [
    {
      "Service": {
        "ServiceCode": "X105",
        "ServicePrice": "200",
        "ServiceQuantity": "1"
      }
    }
  ]
}

在服务器端,我需要这个结构

{
  "details": {
    "ClaimDate": "08/10/2019",
    "HFCode": "55555"
  },
  "items": [
    {
      "itemCode": "Y200",
      "itemPrice": 0,
      "itemQuantity": 0
    }
  ],
  "services": [
    {
      "serviceCode": "X100",
      "servicePrice": 0,
      "serviceQuantity": 0
    }
  ]
}

有没有办法在 Android 应用程序端自定义它?

我尝试手动完成,但我无法获得满意的结果

【问题讨论】:

标签: java json


【解决方案1】:

您可以使用一个转换器函数,它将第一个 json/object 作为输入并返回第二个 json/object 作为输出。不幸的是,由于您的键和数据类型不同,标准库将无法做到这一点。如果您想使用 Jackson 或 Gson,则必须使用 Custom (De) Serializers。

【讨论】:

    【解决方案2】:

    如果您使用Jackson(最流行的 JSON 库之一)并且只想将给定的 JSON 字符串转换为另一个,那么您可以通过以下方式实现:

    ObjectMapper mapper = new ObjectMapper();
    JsonNode root = mapper.readTree(jsonStr);
    
    ObjectNode rootNew = mapper.createObjectNode();
    rootNew.put("details", root.get("Details"));
    
    JsonNode itemNode = root.get("Items").get(0).get("Item");
    ObjectNode itemsNodeNew = mapper.createObjectNode();
    itemsNodeNew.put("itemCode", itemNode.get("ItemCode"));
    itemsNodeNew.put("itemPrice", itemNode.get("ItemPrice"));
    itemsNodeNew.put("itemQuantity", itemNode.get("ItemQuantity"));
    rootNew.put("items", mapper.createArrayNode().add(itemsNodeNew));
    
    JsonNode serviceNode = root.get("Services").get(0).get("Service");
    ObjectNode serviceNodeNew = mapper.createObjectNode();
    serviceNodeNew.put("serviceCode", serviceNode.get("ServiceCode"));
    serviceNodeNew.put("servicePrice", serviceNode.get("ServicePrice"));
    serviceNodeNew.put("serviceQuantity", serviceNode.get("ServiceQuantity"));
    rootNew.put("services", mapper.createArrayNode().add(serviceNodeNew));
    
    System.out.println(rootNew.toString());
    

    但是如果你想将JSON字符串转成POJO进行进一步操作,可以直接反序列化和序列化。

    【讨论】:

      猜你喜欢
      • 2019-11-17
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      相关资源
      最近更新 更多