gpt4 book ai didi

java - 使用 GSON 从包含 JSON 映射的 JSON 对象创建 Java 对象

转载 作者:行者123 更新时间:2023-12-01 12:55:31 24 4
gpt4 key购买 nike

所以,我已经做 GSON 一段时间了,但我现在遇到了使用 JSON Maps 的问题,据我所知,它基本上只是键值对,其中他的值是一个 JSON 对象。

为了让您了解我来自哪里,这是我的 JSON

{
"configs":[
{
"com.hp.sdn.adm.alert.impl.AlertManager":{
"trim.alert.age":{
"def_val":"14",
"desc":"Days an alert remains in storage (1 - 31)",
"val":"14"
},
"trim.enabled":{
"def_val":"true",
"desc":"Allow trim operation (true/false)",
"val":"true"
},
"trim.frequency":{
"def_val":"24",
"desc":"Frequency in hours of trim operations (8 - 168)",
"val":"24"
}
}
},
{
"com.hp.sdn.adm.auditlog.impl.AuditLogManager":{
"trim.auditlog.age":{
"def_val":"365",
"desc":"Days an audit log remains in storage (31 - 1870)",
"val":"365"
},
"trim.enabled":{
"def_val":"true",
"desc":"Allow trim operation (true/false)",
"val":"true"
},
"trim.frequency":{
"def_val":"24",
"desc":"Frequency in hours of trim operations (8 - 168)",
"val":"24"
}
}
}
]
}

所有这些 com.hp.sdn... 都是动态的,就像在运行时之前我不会知道键名一样。我想我可以为此使用 HashMap,GSON 会解决它,但我不确定我会命名该字段...

<小时/>

这是我迄今为止所上的类(class)

package com.wicomb.sdn.models.configs;

import java.util.HashMap;

import com.wicomb.sdn.types.Model;

public class ConfigResponse extends Model {
private ConfigGroup[] configs;
}
<小时/>
package com.wicomb.sdn.models.configs;

import com.wicomb.sdn.types.Model;

public class ConfigGroup extends Model {
private HashMap<String,Config> ????;
}

TL;DR 我应该如何编写 Java 类来让 Gson 知道如何处理我不知道名称的 Json 属性......还有很多。

最佳答案

您可以使用 HashMap(或者,如果子顺序很重要,则使用 LinkedHashMap)为 Gson 提供数据,而不是像对任何项一样正常地迭代条目或键。其他 map 。

在下面的代码中,我使用以下 json 作为输入:

{
"test": 123,
"nested":{
"nested-1": 1,
"nested-2": 2
}
}

代码如下所示:

public void testGson() {
String input = "{\"test\": 123, \"nested\": {\"nested-1\": 1, \"nested-2\": 2}}";
LinkedHashMap<String, Object> json = new Gson().fromJson(input, LinkedHashMap.class);

// iterating
for(Map.Entry<String, Object> entry : json.entrySet()){
System.out.println(entry.getKey() + " -> " + entry.getValue());
}

// testing values
System.out.println(json.get("test")); // should be 123
Map<String, Object> nested = (Map<String, Object>) json.get("nested");
System.out.println(nested.get("nested-1")); // should be 1
System.out.println(nested.get("nested-2")); // should be 2
}

关于java - 使用 GSON 从包含 JSON 映射的 JSON 对象创建 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23943937/

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