【问题标题】:How to parse a JSONArray of JSONObjects in JAVA?如何在 JAVA 中解析 JSONObjects 的 JSONArray?
【发布时间】:2012-06-21 11:56:49
【问题描述】:

我有以下数组从 PHP 返回到我的 JAVA Android 应用程序:

Array ( [0] => Array ( [referral_fullname] => Name 1 [referral_balance] => 500 ) [1] => Array ( [referral_fullname] => Name 2 [referral_balance] => 500 ) );

在 Java 中,它们上面的数组如下所示:

{"0":{"referral_fullname":"Name 1","referral_balance":"500"},"1":{"referral_fullname":"Name 2","referral_balance":"500"}};

对于我正在使用的简单 JSONObject:

JSONTokener tokener = new JSONTokener(result.toString());
JSONObject finalResult = new JSONObject(tokener);

referral_fullname = finalResult.getString("referral_fullname");

但是对于我不知道的对象数组!

【问题讨论】:

标签: java android json arrays


【解决方案1】:
String str = your Json-> apply to.String();

    JSONObject jObject  = new JSONObject(str);


    Map<String,String> map = new HashMap<String,String>();
    Iterator iter = jObject.keys();
    while(iter.hasNext()){
        String key = (String)iter.next();
        String value = jObject .getString(key);
        map.put(key,value);
    }

【讨论】:

    【解决方案2】:

    你的 Json 语法错误,JSONArray 应该是这样的:

    ["0":{"referral_fullname":"Name 1","referral_balance":"500"},"1":{"referral_fullname":"Name 2","referral_balance":"500"}];
    

    并解析包含一些 JSONObjectJsonArray,试试这个:

    //parse the result
                JSONObject jsonResult = null;
                JSONArray arrayResult = null;
                ArrayList<YourObject> listObjects = null;
                try {
                    arrayResult = new JSONArray(result);
                    if(arrayResult != null) {
                        listObjects = new ArrayList<YourObject>();
                        int lenght = arrayResult.length();
                        for(int i=0; i< lenght; i++) {
                            JSONObject obj = arrayResult.getJSONObject(i);
                            YourObject object = new YourObject(obj);
                            listObjects.add(object);
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
    

    并在您的 Class YourObject 中添加一个构造函数以将您的 Json 转换为实例:

    public YourObject(JSONObject json) {
        if (!json.isNull("referral_fullname"))
            this.referral_fullname = json.optString("referral_fullname", null);
        if (!json.isNull("referral_balance"))
            this.referral_balance = json.optString("referral_balance", null);
    }
    

    【讨论】:

    • 你说的没错,我又检查了一遍,发现返回的值不是一个对象数组,而是一个对象的对象。这怎么可能?我什至尝试将其解析为数组,但我收到一条错误消息,指出无法将 JSONObject 转换为 JSONArray。我应该更改我的PHP 代码中的某些内容以使其作为对象数组返回还是像现在一样解析它?
    • 您应该在您的 php 代码中返回一个数组数组,并尝试将其转换为 json:json_encode(yourArrayOFResult);
    • 我对@9​​87654332@ 感到困惑。哪个版本的 json-lib 支持这个?我已经看到记录了这个构造函数签名(带一个字符串参数),但是当我尝试使用 json-lib-2.4-jdk15.jar 时,它说 JSONArray 的唯一构造函数不带参数(如此处所示:json-lib.sourceforge.net/apidocs/jdk15/index.html) .
    • 我说的是android json支持的JSONArray,它在Android中是支持的,不需要使用任何库Json
    • wtf ? ["0":{ 无效
    【解决方案3】:

    你应该使用

    JSONArray finalResult = new JSONArray(tokener);
    

    如果可以的话。您的结构现在是一个具有两个字段 0 和 1 的对象,其中包含另一个对象。如果你想像这样轻松地迭代,你必须得到一个对象数组来代替这个复合对象

    JSONObject jso;
    for(int i = finalResult.lenght-1; i >=0; i--){
      jso = finalResult.get(i);
      // jso == {"referral_fullname":"Name 1","referral_balance":"500"}
    
      [whatever]
    
    }
    

    【讨论】:

      【解决方案4】:

      试试这个......

      final JSONArray result_array = json.getJSONArray("result"); 
      
      for (int i = 0; i < result.length(); i++) {
      
      JSONObject joObject = result_array.getJSONObject(i);
      String jName = joObject.get("referral_fullname").toString();
      String jbalance = joObject.get("referral_balance").toString();
      
                          }
      

      【讨论】:

        【解决方案5】:

        首先创建一个 JSON 对象,然后在内部级别查看如果你有数组然后获取数组。 您需要先制作 JSON 对象。例如,如果 resp 是一个字符串(例如作为 http 响应)

        JSONObject jsonObject = new JSONObject(resp); 
        

        jsonObject 可能包含其他 JSON 对象或 JSON 数组。如何转换 JSON 取决于响应。 如果 arraykey 是 JSON 对象中的一个数组,那么我们可以通过以下方式获取数组列表。

        JSONArray arr  = jsonObject.getJSONArray("arraykey");
        

        检查 arr 的长度,如果大于 0 则它包含 JSON 对象或 JSON 数组,具体取决于数据。 可以在以下位置找到一个完整的示例,其中包含有关 JSON 字符串到 JSON 数组的一些解释 http://www.hemelix.com/JSONHandling

        【讨论】:

          猜你喜欢
          • 2018-10-16
          • 2017-08-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多