java - 在 Java 中解析 JSON 和数据操作
问题描述
我是 Java 的超级新手,我正在尝试解析 JSON 并将数据操作成最终的数据结构,如下所示。
我有这个模型:
public class StoreInfo {
private String storeName;
private String storeCode;
private List<StoreLocations> locations = new ArrayList<>();
}
这是我通过调用 Redis 得到的 JSON 响应:
redisResult = "[{
storeName: 'Walmart',
storeCode: '0001',
locations: [ [Object] ]
},
{
displayName: 'Wegmans',
storeCode: '0002',
locations: [ [Object] ]
}]"
当我调用 Redis 时,我使用 keyNamegroceryStores
和 fieldName 1
。
我想要一个看起来像这样的结果数据结构:
groceryStores: { 1 : [
{
storeName: 'Walmart',
storeCode: '0001',
locations: [ [Object] ]
},
{
displayName: 'Wegmans',
storeCode: '0002',
locations: [ [Object] ]
}]
我在使用 Jackson 将初始 JSON 字符串解析为 type 时遇到了很多麻烦StoreInfo
。当我尝试以下操作时,我从杰克逊那里得到一个例外:
StoreInfo[] storeInfoArray = objectMapper.readValue(redisResult, StoreInfo[].class);
我不明白如何创建
StoreInfo
对象数组。然后,使用键和字段来创建我的最终数据结构。
我是 Java 的超级新手,我已经知道如何在 Javascript 中完成后半部分,但是如何在 Java 中完成呢?
// Assuming the JSON response has been parsed
function addResponse (response, key, field, data) {
response[key] = {}
response[key][field] = data
return response
}
解决方案
最简单的选择是为 StoreInfo 创建一个包装类,即
class StoreInfoDTO {
List<StoreInfo> storeInfoList;
//getter and setters
}
现在使用 ObjectMapper 作为:
StoreInfo[] storeInfoArray = objectMapper.readValue(redisResult,
StoreInfoDTO.class).getStoreInfoList();
第 2 部分,设置响应值:
class ResponseDTO {
@JsonProperty("groceryStores")
Map<Integer, List<StoreInfo>> props;
//getter and setters
}
现在使用它:
ResponseDTO responseDTO = new ResponseDTO();
GrosseryStores grosseryStores = new GrosseryStores();
ArrayList<StoreInfo> storeInfos = new ArrayList<StoreInfo>();
storeInfos.add(new StoreInfo("SN1","1234"));
ArrayList<StoreInfo> storeInfos1 = new ArrayList<StoreInfo>();
storeInfos1.add(new StoreInfo("SN2","1236"));
Map<Integer, List<StoreInfo>> map = new HashMap<>();
map.put(1,storeInfos);
map.put(2,storeInfos1);
responseDTO.setProps(map);
推荐阅读
- javascript - React-Native:从父组件调用组件内的函数
- php - 我想在 cakephp 中创建 zip 文件。但是我的代码不起作用?
- apache - 如何在 Apache http server 2.4.43 中为特定端口记录所有 HTTP 标头
- javascript - 删除机器人消息和用户命令的 Discord.js 命令
- java - NOR、NAND 或 XNOR 的符号/方法/功能?
- django - 模型不渲染
- android - 带有协程的 liveData 仅第一次触发
- asp.net - Signal Hub 代理回调接收推送的对象为 Null
- sql - SQL中的棘手分区
- wordpress - AWS Beanstalk 错误“InvalidParameterValueError:找不到名为 'ap...7' 的应用程序版本。” Bitbucket 管道