java - 向 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 应用程序端自定义它?
我尝试手动进行,但无法获得满意的结果
解决方案
如果您正在使用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进行进一步操作,可以直接反序列化和序列化。
推荐阅读
- tensorflow - 仅使用 tensorflow 进行训练中的数据增强
- javascript - 为什么我得到默认的 vuex 存储值而不是计算属性的更新值?
- php - 尝试使用 PhpStorm 在我的远程服务器上安装 Xdebug
- reactjs - 如何在 json-server 中设置主路由
- spring - Spring 如何在 Spring Boot 中的何处解决“java.lang.NoClassDefFoundError: org/springframework/data/mapping/context/MappingContext”?
- java - 如何反序列化我的不可变子类?
- mysql - SELECT 查询,显示每条记录的名称一次和实例数
- javascript - 如何在JS中以相同的次数返回数组中的元素
- matlab - Matlab以编程方式定义图形的缩放和旋转
- javascript - Vue路由器问题,历史模式在第二层不起作用