2017-01-28 40 views
1

我试图解析我的JSON数据,看起来像下面的数据。 我已经成功了一些字段,但我试图在“条款”下的“类别”下的“0”下获得“名称”。我如何使用Gson Library对嵌套的JSON对象进行排序?

[ 
    { 
    "ID": 1710, 
    "status": "publish", 
    "type": "post", 
    "content": "Lorem ipsum", 
    "parent": null, 
    "format": "standard", 
    "modified_tz": "UTC" 
    }, 
    "featured_image": { 
    "ID": 1713, 
    "title": "km", 
    "status": "inherit", 
    "type": "attachment", 
    } 
    } 
    } 
    } 
    }, 
    "terms": { 
    "category": [ <<<<---AM REFERENCING HERE--->>>>> 
    { 
    "ID": 2, 
    "name": "Entertainment", 
    "slug": "entertainment", 
    "taxonomy": "category", 
    "parent": null, 
    "count": 30, 
    } 
    ] 

    } 
    } 
    ] 

我这是怎么分析的数据:

List<Object> list = (List) new Gson.fromJson(response, List.class); 
List<String, Object> mapPost = list.get(index); 
List<String, Object> terms = (Map<String, Object>) mapPost.get("terms"); 
List<String, Object> category= (Map<String, Object>) terms.get("category"); 
List<String, Object> zero= (Map<String, Object>) category.get("0"); 
String tag = (String) zero.get("name"); 

普莱斯帮助我什么我做错了什么?

+0

它应该是'category.get(0)'。 '0'是该数组的索引,而不是json的密钥 – akash93

+0

这是我得到的错误消息: –

+0

'E/AndroidRuntime:致命例外:主要 进程:example.example.com,PID:13804 java.lang。 ClassCastException:java.util.ArrayList不能转换为java.util.Map' –

回答

0

您提供的代码,甚至不能编译(破Gson构造函数调用; Java不提供List<K,V> ...)。列表不能在运行时转换为映射。该JSON坏为好,但是,假设你提供的一些代码,我想你想解析位于name$[(index)].terms.category[0].name

final String name = gson.fromJson(response, JsonElement.class).getAsJsonArray() 
      .get(index).getAsJsonObject() 
      .get("terms").getAsJsonObject() 
      .get("category").getAsJsonArray() 
      .get(0).getAsJsonObject() 
      .get("name").getAsJsonPrimitive() 
      .getAsString(); 
    System.out.println(name); 

你不需要反序列化你要去每个嵌套的对象遍历(从性能的角度来看这更高效):只要遍历JSON树。

+0

谢谢你!,它的工作! –

+0

由于不确定用户是否包含标签(即'最终字符串名称),我将上面的代码包含在try catch块中,这样可以吗? –

+0

这取决于。你可以打破这个链条,分开它的大块。 –

0

我发现了一个解决方案:

由于“类别”标签包含JSON对象的阵列(在此情况下,单个的对象)。

我投的“类别”到一个ArrayList

Map<String, Object> terms = (Map<String, Object>) mapPost.get("terms"); 
ArrayList category = new ArrayList(); 
category = ((ArrayList) terms.get("category")); //<--Cast to ArrayList 
zero = (Map<String, Object>) category.get(0); 

然后我做了“名称”标签:

String tag = (String) zero.get("name") 
相关问题