2015-11-20 2 views
0

Я делаю проект в android. И у меня есть строка с форматом JSON следующим образом:Конвертировать форматированную строку json в jsonObject Android

"[ 
    { 
    "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?

+2

Это не JSONObject, это JSONArray .... JSONArray array = new JSONArray (yourString); – mjp66

+0

Возможный дубликат [Как разобрать JSON в Java] (http://stackoverflow.com/questions/2591098/how-to-parse-json-in-java) – Selvin

ответ

2

Ваша строка не может быть преобразована в JSONObject. Сначала необходимо преобразовать его в JSONArray:

JSONArray array = new JSONArray(yourString); 

После того, как вы есть, что вы можете получить JSONObject от него:

JSONObject object = array.getJSONObject(0); 

значение «0», это положение вас объект» re accessing, в вашем случае у вас есть только один объект в вашем массиве, и мы можем просто добраться до него, обратившись к объекту в позиции «0» (если у вас было более одного объекта здесь, то вы получили бы доступ ко всем, используя for(), как показано ниже).

Как только вы получили свой JSONObject, теперь вы можете выбрать любые пары ключ/вал, которые он содержит. Пример:

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

Если вы хотите получить в массив вопросов, проведенных в этом объекте, теперь снова нужно создать JSONArray от него:

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

В этом случае, мы имеем больше чем один JSONObject в массиве, поэтому мы создаем для() цикл, чтобы получить доступ ко всему там:

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 является недействительным, а именно «опции» ключ/Vals:

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

Должно быть так:

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

UPDATE 1: ваш JSONException, вероятно, бросали из-за искаженной строки 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": "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\"" 
      } 
     ] 
    } 
] 

UPDATE 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\\\"\"}]}]"; 
+0

Я попробовал решение, но он обнаружил ошибку: 'org.json.JSONException: Значение [{типа java.lang.String не может быть преобразовано в JSONArray' – Sangharsha

+0

Дважды проверьте строку json. В своем ответе я упомянул, что это неверно. Я обновляю свой ответ за секунду с правильно отформатированной строкой. – mjp66

+0

Спасибо Решила свои проблемы .... Двойной код в начале и конце строки был проблемой .... – Sangharsha

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"); 
     } 
} 
+0

Я пробовал ваше решение, но при этом появляется следующая ошибка: 'org.json.JSONException: Значение [{типа java.lang.String не может быть преобразовано в JSONArray' – Sangharsha

+0

@Sangharsha. Какую ошибку вы получили? –

+0

'org.json.JSONException: Значение [{типа java.lang.String не может быть преобразовано в JSONArray' – Sangharsha

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

Как уже отмечалось другими, это массив JSON.Однако, если вы собираетесь это разбирать, я бы рекомендовал вам использовать библиотеку GSON, которая обрабатывает синтаксический разбор всей строки JSON для классов Java, которые вам нужны. Вы можете использовать аннотации, чтобы конвертер знал, какие поля в ваших классах сопоставляются с соответствующими ключами JSON. Это действительно полезно.

Смежные вопросы