【问题标题】:When trying to retrieve JSONObject out of JSONArray is returning null?尝试从 JSONArray 中检索 JSONObject 时返回 null?
【发布时间】:2012-05-31 18:13:33
【问题描述】:

我正在尝试执行以下操作:

UserFunctions uf = new UserFunctions();
    JSONArray json = uf.getAllFreebies();
    System.out.println(json + "blah1"); //Here im able to retrieve the whole JSONArray.

try{    
System.out.println("1");
    for (int i = 1; i <json.length(); i++) {
        System.out.println("2");
            jo = json.optJSONObject(i); //Im getting null value here
            System.out.println(jo + "blah2"); //Here im getting null

...}

我正在使用以下几行打印出我的 JSONArray。

JSONArray json = uf.getAllFreebies();
System.out.println(json + "blah1"); 

现在,当我尝试从 JSONArray 中检索 JSONObject 并尝试将其打印出来时,它会在特定索引处打印出“null”而不是 JSONObject。

jo = json.optJSONObject(i);
System.out.println(jo + "blah2"); 

谁能告诉我我做错了什么?我的意思是当我的 JSONArray 不为空时,我如何为 JSONOBject 获取空值?

谢谢。

以下是我的 JSONArray logcat:

05-31 21:02:57.156: I/System.out(318): [["viking","Art","Potrait","Potrait","Good","im giving out potrait 7325697","176 Fiat Ave","Iselin","New Jersey","USA","08830","2012-05-27"],["n00b","Books","Novels","Novels","Good","Im giving out novels 7325697","b9 maa krupa","petlad","Gujarat","India","388450","2012-05-27"],["n00b","Computers","laptop","laptop giveaway","Good","Im giving out laptop if you are interested than pls call on 7325697","B9 Ma  Krupa","Petlad","Gujarat","India","388450","2012-05-27"],["mista","Cameras & Photos","Camera","Camera GiveAway","Very good","im giving out camera .its kodak .pls email me on mista@gmail.com","Mista Lee elm street","seoul","Korea","South Korea","ha8 9sd","2012-05-27"],["panda","Gaming Consoles","XBOX","XBOX 360","Very Good","Im giving out xbox 360.if you are interested please email me on panda@gmail.com","435 Carmen Rd,","Buffalo","New York","USA","14226","2012-05-27"],["viking","Cameras & Photos","Camera","Kodak Camera","Good","Kodak Camera giveaway.Pls call on 732397","","Iselin","New Jersey","USA","08830","2012-05-28"],["viking","Books","Novels","Novel GA","Good","Novel give away.call on 7325697.","","Iselin","New Jersey","USA","08830","2012-05-28"],["viking","Automotive","Car","Car GiveAway","Good","Im giving out car.if you are interested pls call 7323697.","176 Fiat Ave","Iselin","New Jersey","USA","08830","2012-05-29"],["viking","Collectibles","Medallions","Medallion GA","Very Good","Im giving out medallion.if inetrested pls call 732697","176 Fiat Ave,","Iselin","New Jersey","USA","08830","2012-05-29"],["viking","Clothing & Accessories","cloths","cloths giveaway","Good","im giving out cloths if you are interested pls call on 735697","176 Fiat Ave,","Iselin","New jersey","USA","08830","2012-05-29"],["viking","Books","Novel","Novel GA","Good","pls call 735697","435 carmen rd","buffalo","ny","usa","14226","2012-05-29"],["viking","Books","TextBook","CHemistry 101","GOod","pls call 735697","176 fiat ave","iselin","new jersey","usa","08830","2012-05-29"],["mista","Books","Notebook","Notbook","Good","im giving out notebbok if you are interested pls call 48374288423","elm street","seaoul","na","South Korea","jfjafjk","2012-05-29"]]blah1

尝试在索引 i 处打印 JSONOBject 时的 logcat 输出

05-31 21:02:57.156: I/System.out(318): nullblah2

【问题讨论】:

  • jo = json.getJSONObject(i);
  • 有机会发布您记录的 JSONArray 输出吗?它可能是一个坏对象。如果JSONArray 无法将该索引处的值强制转换为JSONObject,它将返回null。也可以尝试调用json.opt(i) 来获得数组不会强制执行的原始结果。
  • @SamirMangroliya 感谢您的回复。 jo.json.getJSONObject(i);等同于 jo = json.optJSONObject(i);两者都从索引返回 JSONOBject,但唯一的区别是,如果在不同的 getJSONOBject 处找不到 JSONOBject,则 optJSONOBject 返回空值。另外我尝试使用 getJSONOBject() 也不起作用
  • 发布 JSON 本身。 这很可能是一个简单的错误/不匹配。请注意,optoptional 的缩写,因此 null 是有效结果。 (我的 -1 和“过于本地化”是因为没有提供足够的信息。)

标签: java android json arrays


【解决方案1】:

JSON [[...], [...], [...]] 不包含 JSON 对象,但它确实有一些 JSON 数组。

因此,optJSONObject 找到了一个 JSON 数组(它需要一个 JSON 对象)并返回 null,因为它的类型不正确。 (opt可选 的缩写。)

使用optJSONArray(注意Array 而不是Object)。或者,使用getJSONArray,这将在失败时抛出 JSONException。

编码愉快。


请注意,JSON 严格区分对象、数组和各种值。 Array 是一种特殊(子)类型的 Object(在 JSON 意义上)的概念存在于 JavaScript 中,但 不一定 扩展到其他 JSON 实现。例如,JSONArray 类与 JSONObject 类没有关系。

【讨论】:

  • 一个快速的问题。如您所见,我正在获取 JSONArray JSONArray json = uf.getAllFreebies();所以现在你告诉我我有 JSONArrays 这是否意味着我有 JSONArray 的 JSONArray?我现在还应该声明新的 JSONArray 并执行 JSONArray js = json.getJSONArray(i);?
  • 是的,一个JSON-array中有JSON-arrays,所以结论是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多