首页 > 解决方案 > 向 JSON 结构添加更改

问题描述

我有以下 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 应用程序端自定义它?

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

标签: javajson

解决方案


如果您正在使用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进行进一步操作,可以直接反序列化和序列化。


推荐阅读