gpt4 book ai didi

java - 使用JAVA的Gson库解析JSON

转载 作者:行者123 更新时间:2023-12-02 05:47:01 25 4
gpt4 key购买 nike

我正在解析 JAVA 中的 JSON,其结构如下,

{
"id": "P410R",
"create_time": "2014-05-29T19:21:34Z",
"update_time": "2014-05-29T19:21:34Z",
"state": "created",
"links": [
{
"href": "url1",
"rel": "self",
"method": "GET"
},
{
"href": "url2",
"rel": "approval_url",
"method": "REDIRECT"
},
{
"href": "url3",
"rel": "execute",
"method": "POST"
}
]
}

我需要获取 links.href 其中 rel = "approval_url"

到目前为止,我一直在研究嵌套数据结构声明,但无法访问 links.href。我正在使用 GSON 库,这是我的代码:

Gson gson = new Gson();
JsonElement element = gson.fromJson (jsonResult, JsonElement.class); //jsonResult is class object


JsonObject jsonObj = element.getAsJsonObject();
Map jsonJavaRootObject = new Gson().fromJson(jsonObj, Map.class);
ArrayList refUrls = (ArrayList) jsonJavaRootObject.get("links");

// Map gsonStrMap = new Gson().from .fromJson(refUrls.get(1), Map.class);

String result = jsonJavaRootObject.get("links").toString();
//JsonObject jsonObjRefUrl = (JsonObject) refUrls.get(1);

最佳答案

这是使用 Map<String, Object> 的简单解决方案如果您只对单一值感兴趣。即使它也可以使用 Plain POJO 类来实现。

Gson gson = new Gson();
Type type = new TypeToken<Map<String, Object>>() {}.getType();

Map<String, Object> data = gson.fromJson(json, type);
ArrayList<Map<String, String>> list = (ArrayList<Map<String, String>>) (data.get("links"));
for (Map<String, String> map : list) {
if (map.get("rel").equals("approval_url")) {
System.out.println(map.get("href"));
break;
}
}
<小时/>

如果您仅对链接感兴趣,这里是使用 JAVA 普通 POJO 类的解决方案。

class Links{
private ArrayList<Link> links;
// getter & setter
}

class Link {
private String href;
private String rel;
private String method;
// getter & setter
}

Gson gson = new Gson();
Links links = gson.fromJson(json, Links.class);

for(Link link:links.getLinks()){
if(link.getRel().equals("approval_url")){
System.out.println(link.getHref());
break;
}
}

关于java - 使用JAVA的Gson库解析JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23961509/

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