java - Java 读取 JSON 属性名称而不解析为类
问题描述
我有个问题。
之前,我将多个对象从 1 个 JSON 解析为ArrayList<Object>
. 这很好用,但现在我需要做一些不同的事情,我不知道该怎么做。我有以下 JSON:
{
"Market":"USDT",
"Coin":"BTC",
"Candles":{
"USDT":{
"BTC":{
"3h":[
{
"Close":"used"
}
],
"1h":[
{
"EMA20":"used",
"EMA200":"used"
}
],
"5m":[
{
"EMA5":"used",
"EMA20":"used"
},
{
"EMA5":"used",
"EMA20":"used"
}
]
}
}
}
}
从这个 JSON 我想得到一个ArrayList<String>
只有值:“3h”、“1h”、“5m”。数组中的值对我来说无关紧要,我只需要这 3 个句点。这是我用于将某些内容解析为类的 json 解析器:
public ArrayList<Agent> parseJsonToList(String StrJSON) {
Gson gson = new GsonBuilder().registerTypeAdapter(LocalDateTime.class, (JsonDeserializer<LocalDateTime>) (json, type, jsonDeserializationContext) -> {
try{
return LocalDateTime.parse(json.getAsJsonPrimitive().getAsString(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
} catch (DateTimeParseException e){
return LocalDateTime.parse(json.getAsJsonPrimitive().getAsString(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS"));
}
}).create();
Type listType = new TypeToken<ArrayList<Agent>>() {}.getType();
return gson.fromJson(StrJSON, listType);
}
现在如何在不创建类(如果可能)的情况下从我的新 JSON 中获取这 3 个值?
解决方案
您可以将这段丑陋的代码用于您的目的,但这段代码只是为了展示如何实现这一点,我不建议在生产中使用这段代码:
private List<String> extractPeriods(String jsonString) {
Gson gson = new Gson();
Map map = gson.fromJson(jsonString, Map.class);
Map candlesMap = (Map) map.get("Candles");
if (Objects.isNull(candlesMap))
return null;
Map usdtMap = (Map) candlesMap.get("USDT");
if (Objects.isNull(usdtMap))
return null;
Map btcMap = (Map) usdtMap.get("BTC");
if (Objects.isNull(btcMap))
return null;
return new ArrayList<>(btcMap.keySet());
}
当然,您也可以编写正则表达式来搜索所有这些值。
或者您可以只创建部分对象。例如,您可以为根、蜡烛、USDT 和 BTC 字段创建对象,只需使用 Map 类型。
推荐阅读
- vue.js - 如何将登录页面与 Vue SPA 集成?
- python - 为什么我的 Python 控制台不会被 system('cls') 清除?
- javafx - 带有 2 个 GridPane 的 Javafx BorderPane,第二个 GridPane 未显示
- sql - 将单列单行 XML 数据转换为 SQL 表
- c++ - 控制到达非空函数的结尾 -wreturn-type
- asp.net-mvc - 通过 POST 发送多选
- reactjs - Heroku 在部署时给出应用程序错误
- java - 延迟一段时间后执行任务,如果遇到无限循环则停止
- azure-devops - Azure DevOps 管道从 UI 输入变量值
- preact - preact-cli 项目在添加 react-ga 时显示“无法解析 'react'”(别名问题)