如何解析JSON并将其值转换为数组?

时间:2010-02-12 21:23:11

标签: java json

public static void parseProfilesJson(String the_json){
       try {
            JSONObject myjson = new JSONObject(the_json);

            JSONArray nameArray = myjson.names();
            JSONArray valArray = myjson.toJSONArray(nameArray);
            for(int i=0;i<valArray.length();i++)
            {
                String p = nameArray.getString(i) + "," + ValArray.getString(i);
                Log.i("p",p);
            }       

        } catch (JSONException e) {
                e.printStackTrace();
        }
    }

如您所见,此示例代码将打印出JSON的 KEY ,然后是JSONS的 VALUES

如果json是这样的话,它会打印个人资料,约翰

{'profiles':'john'}

那很酷。那很好,因为我可以使用这些变量。但是,如果JSON是这样的话,那该怎么办:

{'profiles': [{'name':'john', 'age': 44}, {'name':'Alex','age':11}]}

在这种情况下,整个值将是数组。基本上,我只想获取该数组(在这种情况下是“值”)...并将其转换为JAVA可以使用的实际数组。我怎样才能做到这一点?感谢。

2 个答案:

答案 0 :(得分:57)

为您的例子:

{'profiles': [{'name':'john', 'age': 44}, {'name':'Alex','age':11}]}

你必须做一些这样的事情:

JSONObject myjson = new JSONObject(the_json);
JSONArray the_json_array = myjson.getJSONArray("profiles");

返回数组对象。

然后迭代将如下:

    int size = the_json_array.length();
    ArrayList<JSONObject> arrays = new ArrayList<JSONObject>();
    for (int i = 0; i < size; i++) {
        JSONObject another_json_object = the_json_array.getJSONObject(i);
            //Blah blah blah...
            arrays.add(another_json_object);
    }

//Finally
JSONObject[] jsons = new JSONObject[arrays.size()];
arrays.toArray(jsons);

//The end...

您必须确定数据是否为数组(只需检查charAt(0)是否以[字符开头)。

希望这有帮助。

答案 1 :(得分:0)

您可以选择quick-json解析器来满足您的要求......

quick-json解析器非常直观,灵活,非常快速且可自定义。试试这个

[quick-json parser](https://code.google.com/p/quick-json/) - quick-json功能 -

  • 符合JSON规范(RFC4627)

  • 高性能JSON解析器

  • 支持灵活/可配置的解析方法

  • 任何JSON Heirarchy的键/值对的可配置验证

  • 易于使用#非常少的足迹

  • 提高开发人员友好且易于跟踪的异常

  • 可插入自定义验证支持 - 可以通过在遇到时配置自定义验证器来验证密钥/值

  • 验证和非验证解析器支持

  • 支持使用quick-json验证解析器的两种配置类型(JSON / XML)

  • 需要JDK 1.5#不依赖外部库

  • 通过对象序列化支持Json生成

  • 在解析过程中支持集合类型选择

例如

JsonParserFactory factory=JsonParserFactory.getInstance();
JSONParser parser=factory.newJsonParser();
Map jsonMap=parser.parseJson(jsonString);