将json格式的字符串转换为jsonObject Android

时间:2015-11-20 09:05:21

标签: android json

我在android中做一个项目。 我有一个JSON格式的字符串如下:

"[
    {
    "id":46,
    "title":"Lorem ipsum dolor sit amet, consectetur adipiscing elit",
    "description":"Suspendisse lacinia dui ut metus ullamcorper,",
    "start_date":"October 26, 2015",
    "end_date":"January 1, 2016",
    "questions":
        [{
        "question":"<p>Proin aliquam augue eu ipsum viverra,<\\\/p>\\n",
        "options"frown emoticon"Yes","No"]
        },
        {
        "question":"<p>Morbi pharetra augue eu nunc porta<\\\/p>\\n",
        "options"frown emoticon"One","Two","Three","All"]
        },
        {
        "question":"<p>In nec dui pulvinar, ultrices <\\\/p>\\n",
        "options"frown emoticon"Yes","No","Other"]
        }]
    }
]"

任何人都可以帮我将此字符串转换为JSONobject吗?

4 个答案:

答案 0 :(得分:2)

这不是JSONObject。它是JSONArray

您可以获得如下所示的JSONArray

JSONArray jsonArray = new JSONArray(responseString);

从数组中,您可以获得JSONObject,如下所示。

for(int i = 0 ; i< jsonArray.length() ; i++){

        // This will get first JSONObject from JSONArray.
        JSONObject jObject = jsonArray.getJSONObject(i);

        // Get all key from array using JSONObject.
        int id = jObject.getInt("id");
        String id = jObject.getString("title");
        String id = jObject.getString("description");
        String id = jObject.getString("start_date");
        String id = jObject.getString("end_date");

        // Get Inner question JSONArray
        JSONArray queArray = jObject.getJSONArray("questions");
        for(int j = 0 ; j< queArray.length() ; j++){
                String question = queArray.getJSONObject(j).getString("question");
                String options= queArray.getJSONObject(j).getString("options");
        }
}

答案 1 :(得分:2)

您的字符串无法转换为JSONObject。您首先需要将其转换为JSONArray

JSONArray array = new JSONArray(yourString);

完成后,您可以从中获取JSONObject:

JSONObject object = array.getJSONObject(0);

值'0'是您正在访问的对象的位置,在您的情况下,您的数组中只有一个对象,我们可以通过访问'0'位置的对象来获取它(如果您这里有多个对象,然后你使用for()循环访问它们,如下所示。)

一旦你获得了JSONObject,你现在可以选择它包含的任何键/值对。例如:

int myId = object.getInt("id");
String myTitle = object.getString("title");

如果你想了解这个对象中的问题数组,你现在需要再次创建一个JSONArray:

JSONArray questionsArray = object.getJSONArray("questions");

在这种情况下,我们在数组中有多个JSONObject,因此我们创建一个for()循环来访问那里的所有内容:

for (int i = 0; i < questionsArray.length(); i++) {
    JSONObject questionObject = questionsArray.getObject(i);
    String myQuestion = questionObject.getString("question");
    String myOptions = questionObject.getString("options");
}

BTW你的json字符串无效,特别是“options”key / vals:

"options"frown emoticon"Yes","No"

应该是这样的:

"options": "frown emoticon\"Yes\",\"No\""

更新1:由于json字符串损坏,您的JSONException可能会被抛出。它应该是这样的:

[
    {
        "id": 46,
        "title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
        "description": "Suspendisse lacinia dui ut metus ullamcorper,",
        "start_date": "October 26, 2015",
        "end_date": "January 1, 2016",
        "questions": [
            {
                "question": "<p>Proin aliquam augue eu ipsum viverra,<\\/p>\\n",
                "options": "frownemoticon\"Yes\",\"No\""
            },
            {
                "question": "<p>Morbipharetraaugueeununcporta<\\/p>\\n",
                "options": "frownemoticon\"One\",\"Two\",\"Three\",\"All\""
            },
            {
                "question": "<p>Innecduipulvinar,ultrices<\\/p>\\n",
                "options": "frownemoticon\"Yes\",\"No\",\"Other\""
            }
        ]
    }
]

更新2:如果您正在从应用中的某个地方读取固定的json字符串,那么该字符串应如下所示(请注意,在这种情况下,每个引号都必须转义用反斜杠):

String yourString = "[{\"id\":46,\"title\":\"Lorem ipsum dolor sit amet, consectetur adipiscing elit\",\"description\":\"Suspendisse lacinia dui ut metus ullamcorper,\",\"start_date\":\"October 26, 2015\",\"end_date\":\"January 1, 2016\",\"questions\":[{\"question\":\"<p>Proin aliquam augue eu ipsum viverra,<\\\\/p>\\\\n\",\"options\":\"frownemoticon\\\"Yes\\\",\\\"No\\\"\"},{\"question\":\"<p>Morbipharetraaugueeununcporta<\\\\/p>\\\\n\",\"options\":\"frownemoticon\\\"One\\\",\\\"Two\\\",\\\"Three\\\",\\\"All\\\"\"},{\"question\":\"<p>Innecduipulvinar,ultrices<\\\\/p>\\\\n\",\"options\":\"frownemoticon\\\"Yes\\\",\\\"No\\\",\\\"Other\\\"\"}]}]";

答案 2 :(得分:1)

JSONArray jsonArray = new JSONArray(yourString);
JSONObject obj=jsonArray.getJsonObject(0);

答案 3 :(得分:1)

正如其他人所说,这是一个JSON数组。但是,如果你要做的就是解析它,我建议你使用GSON库,它处理将整个JSON字符串解析为你需要的Java类。您可以使用注释让转换器知道类中的哪些字段映射到相应的JSON键。这非常有用。