Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Gson JAVA库解析JSON_Java_Json_Gson - Fatal编程技术网

使用Gson JAVA库解析JSON

使用Gson JAVA库解析JSON,java,json,gson,Java,Json,Gson,我正在用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" }, {

我正在用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 where rel=“批准\u 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
的简单解决方案。即使它也可以使用普通的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;
    }
}
Gson-Gson=new-Gson();
Type Type=new-TypeToken(){}.getType();
Map data=gson.fromJson(json,类型);
ArrayList=(ArrayList)(data.get(“links”);
用于(地图:列表){
如果(map.get(“rel”).equals(“批准url”)){
System.out.println(map.get(“href”);
打破
}
}

如果您只对链接感兴趣,下面是使用JAVA普通POJO类的解决方案

类链接{
私有ArrayList链接;
//吸气剂和塞特
}
类链接{
私有字符串href;
私有字符串rel;
私有字符串方法;
//吸气剂和塞特
}
Gson Gson=新的Gson();
Links=gson.fromJson(json,Links.class);
for(Link:links.getLinks()){
if(link.getRel().equals(“批准url”)){
System.out.println(link.getHref());
打破
}
}

如果您想尝试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;
    }
}
Gson gson = new Gson();
JsonElement element = gson.fromJson (jsonResult, JsonElement.class); //jsonResult is class object
JsonObject jsonObj = element.getAsJsonObject();
JsonArray links = jsonObj.get("links").getAsJsonArray();
for (JsonElement item : links) {
   if (item.getAsJsonObject().get("rel").toString().equals("\"approval_url\"") {
      // match
   }
}