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

2022-09-01 03:48:40
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 的值。

它会打印配置文件,如果json是这样的:

{'profiles':'john'}

很酷。这很好,因为我可以使用这些变量。但是,如果JSON是这样的呢:

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

在这种情况下,整个值将是数组。基本上,我只想抓住那个数组(在这种情况下是“值”)...并将其转换为JAVA可以使用的实际数组。我该怎么做?谢谢。


答案 1

对于您的示例:

{'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)[

希望这有帮助。


答案 2

你可以更喜欢快速json解析器来满足你的要求...

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

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

  • 符合 JSON 规范 (RFC4627)

  • 高性能 JSON 解析器

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

  • 对任何 JSON 继承制的键/值对进行可配置的验证

  • 易于使用 # 非常少的占地面积

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

  • 可插入自定义验证支持 - 可以通过配置自定义验证器来验证键/值

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

  • 支持两种类型的配置(JSON/XML),用于使用快速 json 验证解析器

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

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

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

例如:

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