0

我有一个 json 输出,它返回如下内容:

[
 {
  "title":"facebook",
  "description":"social networking website",
  "url":"http://www.facebook.com"
 },
 {
  "title":"WoW",
  "description":"game",
  "url":"http://us.battle.net/wow/"
 },
 {
  "title":"google",
  "description":"search engine",
  "url":"http://www.google.com"
 }
]

我熟悉解析具有标题对象的 json,但我不知道如何解析上面的 json,因为它缺少标题对象。您能否为我提供一些提示/示例,以便我检查它们并解析上述代码?

注意:我在这里检查了一个类似的例子,但它没有一个令人满意的解决方案。

4

4 回答 4

1
JSONArray jsonArr = new JSONArray(jsonResponse);

for(int i=0;i<jsonArr.length();i++){ 
JSONObject e = jsonArr.getJSONObject(i);
String title = e.getString("title");
}
于 2013-02-05T12:45:15.910 回答
1

例如,使用JSONObject.has(String name)检查当前 json 中是否存在键名

 JSONArray jsonArray = new JSONArray("json String");
 for(int i = 0 ; i < jsonArray.length() ; i++) {
   JSONObject jsonobj = jsonArray.getJSONObject(i);
   String title ="";
   if(jsonobj.has("title")){ // check if title exist in JSONObject

     String title = jsonobj.getString("title");  // get title
   }
   else{
        title="default value here";
    }

}
于 2013-02-05T12:44:16.533 回答
1

您的 JSON 是一个对象数组。

围绕(和其他 JSON 序列化/反序列化)库的整个想法Gson是,您最终会得到自己的 POJO。

下面是如何创建一个 POJO 来表示包含在数组中的对象并List从该 JSON 中获取它们:

public class App 
{
    public static void main( String[] args ) 
    {
        String json = "[{\"title\":\"facebook\",\"description\":\"social networking website\"," +
            "\"url\":\"http://www.facebook.com\"},{\"title\":\"WoW\",\"description\":\"game\"," +
            "\"url\":\"http://us.battle.net/wow/\"},{\"title\":\"google\",\"description\":\"search engine\"," +
            "\"url\":\"http://www.google.com\"}]";

        // The next 3 lines are all that is required to parse your JSON 
        // into a List of your POJO
        Gson gson = new Gson();
        Type type = new TypeToken<List<WebsiteInfo>>(){}.getType();
        List<WebsiteInfo> list = gson.fromJson(json, type);

        // Show that you have the contents as expected.
        for (WebsiteInfo i : list)
        {
            System.out.println(i.title + " : " + i.description);
        }
    }
}

// Simple POJO just for demonstration. Normally
// these would be private with getters/setters 
class WebsiteInfo 
{
    String title;
    String description;
    String url;
}

输出:

facebook : 社交网站
WoW : 游戏
google : 搜索引擎

编辑添加:因为 JSON 是一个数组,所以TypeToken需要使用 来获取 a List,因为涉及到泛型。没有它,您实际上可以执行以下操作:

WebsiteInfo[] array = new Gson().fromJson(json, WebsiteInfo[].class); 

现在,您WebsiteInfo从一行代码中获得了一组对象。话虽如此,使用泛型CollectionList如演示的那样灵活得多,并且通常被推荐。

您可以在Gson 用户指南中阅读更多相关信息

于 2013-02-05T17:31:15.867 回答
0
JSONArray array = new JSONArray(yourJson);
for(int i = 0 ; i < array.lengh(); i++) {
JSONObject product = (JSONObject) array.get(i);
    .....
}
于 2013-02-05T12:44:46.360 回答