gpt4 book ai didi

Java解析JSON路径值到变量

转载 作者:行者123 更新时间:2023-12-05 06:51:41 31 4
gpt4 key购买 nike

我有一个问题。我有以下代码将 JSON 字符串解析为对象:

public AgentStrategy parseJsonToObject(String jsonString) {
Gson gson = new Gson();
AgentStrategy agent = gson.fromJson(jsonString, AgentStrategy.class);
return agent;
}

但现在我有一个 JSON,其值不等于属性名称。这是新的 JSON:

{
"Market": "USDT",
"Coin":"BTC",
"ModuleEnabled":{
"Patterns":{
"Buy":"true",
"Sell":"true"
},
"EMA":{
"Buy":"true",
"Sell":"false"
}
}
}

这就是类的样子:

public class AgentStrategy {

public String Market;
public String Coin;

public boolean ModuleEnabledBuyEMA;
public boolean ModuleEnabledSellEMA;
public boolean ModuleEnabledBuyPatterns;
public boolean ModuleEnabledSellPatterns;

public AgentStrategy parseJsonToObject(String jsonString) {
Gson gson = new Gson();
AgentStrategy agent = gson.fromJson(jsonString, AgentStrategy.class);

return agent;
}
}

现在如何匹配 JSON 和类如下:

"ModuleEnabled" -> "EMA" -> "Buy" = ModuleEnabledBuyEMA
"ModuleEnabled" -> "EMA" -> "Sell" = ModuleEnabledSellEMA
"ModuleEnabled" -> "Patterns" -> "Buy" = ModuleEnabledBuyPatterns
"ModuleEnabled" -> "Patterns" -> "Sell" = ModuleEnabledSellPatterns

最佳答案

您可以编写一个自定义反序列化器,在其中使用默认的 Gson 反序列化并另外手动解析“有问题的”字段:

public class AgentStrategyDeserializer implements JsonDeserializer<AgentStrategy> {

@Override
public AgentStrategy deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {

Gson gson = new Gson();
AgentStrategy agent = gson.fromJson(jsonElement, AgentStrategy.class);
// At this point only Market and Coin attributes are set. Since the booleans can not be parsed they are initialized to false

JsonObject moduleEnabledJsonObject = jsonElement.getAsJsonObject().get("ModuleEnabled").getAsJsonObject();
boolean moduleEnabledBuyPatterns = moduleEnabledJsonObject.get("Patterns").getAsJsonObject().get("Buy").getAsBoolean();
boolean moduleEnabledSellPatterns = moduleEnabledJsonObject.get("Patterns").getAsJsonObject().get("Sell").getAsBoolean();
boolean moduleEnabledBuyEMA = moduleEnabledJsonObject.get("EMA").getAsJsonObject().get("Buy").getAsBoolean();
boolean moduleEnabledSellEMA = moduleEnabledJsonObject.get("EMA").getAsJsonObject().get("Sell").getAsBoolean();

agent.setModuleEnabledBuyEMA(moduleEnabledBuyEMA);
agent.setModuleEnabledSellEMA(moduleEnabledSellEMA);
agent.setModuleEnabledBuyPatterns(moduleEnabledBuyPatterns);
agent.setModuleEnabledSellPatterns(moduleEnabledSellPatterns);

return agent;
}
}

这是你使用反序列化器的方式:

    GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(AgentStrategy.class, new AgentStrategyDeserializer());
Gson gson = gsonBuilder.create();
AgentStrategy agentStrategy = gson.fromJson(jsonString, AgentStrategy.class);

关于Java解析JSON路径值到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66109644/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com