gpt4 book ai didi

java - 如何使用java动态获取Json字符串中Key的值

转载 作者:行者123 更新时间:2023-11-30 08:10:07 25 4
gpt4 key购买 nike

我正在尝试使用 java 解析 Json 字符串,但我遇到了一些情况。

下面是我的 JSON 字符串:

"NetworkSettings": {
"Ports": {
"8080/tcp": [ // It will change dynamically like ("8125/udp" and "8080/udp" etc....)
{
"HostIp": "0.0.0.0",
"HostPort": "8080"
}
]
}
}

我尝试使用以下代码解析上面的 json 字符串:

JsonObject NetworkSettings_obj=(JsonObject)obj.get("NetworkSettings");
if(NetworkSettings_obj.has("Ports"))
{
JsonObject ntw_Ports_obj=(JsonObject)NetworkSettings_obj.get("Ports");
if(ntw_Ports_obj.has("8080/tcp"))
{
JsonArray arr_ntwtcp=(JsonArray)ntw_Ports_obj.get("8080/tcp");
JsonObject ntwtcp_obj=arr_ntwtcp.get(0).getAsJsonObject();
if(ntwtcp_obj.has("HostIp"))
{
ntw_HostIp=ntwtcp_obj.get("HostIp").toString();
System.out.println("Network HostIp = "+ntw_HostIp);
}
if(ntwtcp_obj.has("HostPort"))
{
ntw_HostPort=ntwtcp_obj.get("HostPort").toString();
System.out.println("Network HostPort = "+ntw_HostPort);
}
}
else
{
ntw_HostIp="NA";
ntw_HostPort="NA";
}
}
else
{
ntw_HostIp="NA";
ntw_HostPort="NA";
}

在我的代码中我使用了这段代码

JsonArray arr_ntwtcp=(JsonArray)ntw_Ports_obj.get("8080/tcp");

获取“8080/tcp”的值

如何获取动态更改 key 的值,例如(“8125/udp”、“8134/udp”等...)

注意:我使用 gson 库进行解析

修改后

public static void main(String args[])
{
try
{
JsonParser parser = new JsonParser();
JsonObject obj=(JsonObject)parser.parse(new FileReader("sampleJson.txt"));
System.out.println("obj = "+obj);
JsonObject NetworkSettings_obj=(JsonObject)obj.get("NetworkSettings");
if(NetworkSettings_obj.has("Ports"))
{
JsonObject ntw_Ports_obj=(JsonObject)NetworkSettings_obj.get("Ports");
System.out.println("ntw_Ports_obj = "+ntw_Ports_obj);
Object keyObjects = new Gson().fromJson(ntw_Ports_obj, Object.class);
List keys = new ArrayList();
System.out.println(keyObjects instanceof Map); //**** here the statement prints false
if (keyObjects instanceof Map) // *** so controls doesn't enters into the if() condition block *** //
{
Map map = (Map) keyObjects;
System.out.println("Map = "+map);
keys.addAll(map.keySet());
String key = (String) keys.get(0);
JsonArray jArray = (JsonArray) ntw_Ports_obj.get(key);
System.out.println("Array List = "+jArray);
}
}
}
catch(Exception e)
{

}

}

最佳答案

你可以做类似的事情(未经测试,但应该没问题):

if (ntw_Ports_obj.isJsonArray()) {

Iterator it = ntw_Ports_obj.getAsJsonArray().iterator();

while (it.hasNext()) {

JsonElement element = (JsonElement) it.next();

if(element.isJsonArray()){

JsonArray currentArray = element.getAsJsonArray();

// Do something with the new JsonArray...

}

}
}

关于java - 如何使用java动态获取Json字符串中Key的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30502501/

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