如何在JAVA中解析一个JSONArray中的JSONObjects?

3

我从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");

但是对于对象数组,我不知道怎么办!


这对你有用吗?https://dev59.com/8m035IYBdhLWcg3wC7mf - Vrashabh Irde
5个回答

4
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);
    }

3
你的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();
            }

在你的类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”代码中更改一些内容,以便将其作为对象数组返回,还是像现在这样解析它? - Andrei Stalbe
在您的 PHP 代码中,应返回一个数组的数组,并尝试使用以下方式将其转换为 JSON:json_encode(yourArrayOFResult); - Houcine
我对 new JSONArray(result) 感到困惑。哪个版本的 json-lib 支持这个?我看过这个构造函数签名(使用一个字符串参数),但是当我尝试使用 json-lib-2.4-jdk15.jar 时,它说 JSONArray 的唯一构造函数不带参数(如此处所示:http://json-lib.sourceforge.net/apidocs/jdk15/index.html)。 - LarsH
我在谈论 Android JSON 支持中的 JSONArray,它在 Android 中得到支持,而不需要使用任何库 Json。 - Houcine
什么鬼?["0":{ 是无效的。 - Royi Namir
使用 JSON Lint 验证器(谷歌一下)检查 JSON 是否有效。并且没有必要说“wtf”。-_- - Houcine

2
你应该使用

标签


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]

}

1

试试这个……

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();

                    }

1
首先创建一个 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中找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接