java - 如何在Java中反序列化这个json?
问题描述
[
"news",
"{\"marketType\":\"chako\",\"data\":\"[{\\\"price\\\":572.05,\\\"qty\\\":106},{\\\"price\\\":224.08,\\\"qty\\\":700.25},{\\\"price\\\":440.5,\\\"qty\\\":600.55}]\"}"
]
我通过 websocket 在 chrome 中获取这些数据。这实际上以 42 开头,但为简单起见,我已将其删除,因为它可以通过String.split("42",2)
. 尝试了自定义反序列化器和其他东西,但没有运气。
解决方案
它看起来像是一个数组,其中第二个元素是一个包含 JSON 的字符串,它有 2 个字段,marketType
并且data
. data
又是一个包含 JSON 的字符串。
编辑:Java解决方案
void test() throws IOException {
String json = "["
+ "\"news\","
+ " \"{\\\"marketType\\\":\\\"chako\\\",\\\"data\\\":\\\"[{\\\\\\\"price\\\\\\\":572.05,\\\\\\\"qty\\\\\\\":106},{\\\\\\\"price\\\\\\\":224.08,\\\\\\\"qty\\\\\\\":700.25},{\\\\\\\"price\\\\\\\":440.5,\\\\\\\"qty\\\\\\\":600.55}]\\\"}\""
+ "]";
ObjectMapper mapper = new ObjectMapper();
List<String> arr = mapper.readValue(json, new TypeReference<List<String>>() {});
Map<String, String> obj = mapper.readValue(arr.get(1), new TypeReference<Map<String, String>>() {});
List<Map<String, Number>> data = mapper.readValue(obj.get("data"), new TypeReference<List<Map<String, Number>>>() {});
System.out.println(data);
}
编辑前:
用于 chrome 的 JavaScript 解决方案。
const arr = [
"news",
"{\"marketType\":\"chako\",\"data\":\"[{\\\"price\\\":572.05,\\\"dairy\\\":106},{\\\"price\\\":224.08,\\\"dairy\\\":700.25},{\\\"price\\\":440.5,\\\"dairy\\\":600.55}]\"}"
];
const record = JSON.parse(arr[1]);
const data = JSON.parse(record["data"])
console.log(data) // This is an array or objects with "price" and "dairy" properties
推荐阅读
- java - 将 android volley 响应设置为其他活动的字符串
- r - 使用 R 中的矩阵制作分组条形图
- java - 从 InputStream 读取 - 忙等待时的非阻塞 VS 超时阻塞?
- ios - Ansible regex_findall 多个字符串
- zabbix - 需要什么条件才能确定zabbix agent服务不可用?
- bash - 如何将多个文本文件附加在一起然后拆分它们?
- json - 如何在 Flutter Dart 中迭代 JSON Map 并检索键值结果?
- html - 页眉和页脚中的空格?
- reactjs - 使用 Webpack 4 加载较少语法的问题
- java - 从 X 到扩展 X 的泛型类型的未经检查的强制转换