2014-11-06 4 views
0

У меня есть JSONArray который выглядит следующим образом:JSONArray в строку в Java

enter image description here

как я могу преобразовать его в строку?

если я попробовать:

json.toString(); 

строка:

["[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]"] 

, но я хочу что-то вроде этого:

{ 
"json": 
    "values": [ 
     { 
      "answer": "true", 
      "remark":"", 
      "questionId": "0" 
      "checklistId": "2" 
     }, 
     { 
      "answer": "true", 
      "remark":"", 
      "questionId": "0" 
      "checklistId": "2" 
     } 
    ] 
} 

EDIT:

это пропущено как Я создаю массив json:

if(cb.isChecked() || !text.getText().toString().equals("")){ 
        ChecklistAnswer answer = new ChecklistAnswer(questions.get(id).id, 2, cb.isChecked(), text.getText().toString()); 

        answers.add(answer); 
       } 
      } 
      JSONArray json = new JSONArray(answers); 
      String jsonString = json.toString(); 
+0

показать некоторый фрагмент кода –

+1

это работает как задумано ... вы просто положить 'ChecklistAnswer' объект в массив ... не' 'JSONObject' ... ChecklistAnswer.toString()' возвращает «[email protected]» ... поэтому либо переопределить метод ChecklistAnswer.toString, чтобы вернуть строку json, либо сделать функцию для перевода ChecklistAnswer в JSOObject – Selvin

+0

show codes, используемые для разбора json –

ответ

0

Вам не нужно использовать какие-либо дополнительные библиотеки. Класс JSONArray имеет an extra .toString(int) method, который делает довольно печатную для вас. Параметр int является коэффициентом отступа.

JSONArray arr = ... 
System.out.println(arr.toString(4)); 

Он также работает с JSONObject.

Ваша большая проблема в том, что ваш JSONArray не строится должным образом. Вы должны добавить другие JSONArray s и JSONObject s к нему, но вы добавляете другие объекты. Они неявно превращаются в String s. Вам нужно преобразовать их в JSON, прежде чем помещать их в ваш массив.

+0

Почему downvote? –

+0

извините, но проблема не здесь ... JSONArray.toString (int) == JSONArray.toString() со значениями по умолчанию (пролечиво без образования вообще) – Selvin

+0

@Selvin Похоже, у него было две проблемы! В любом случае, я теперь рассмотрел оба варианта. –

-1

Попробуйте это:

JsonArray jArray = //Your Json Array; 
JSONObject jObj = new JSONObject(); 
jObj.put("test", jArray); 
String requiredString = jObj.optString("test"); 
0

Проблема не JSONArray.toString(), как уже упоминалось @Selvin.

От источника JSONArray:

/** 
* Encodes this array as a compact JSON string, such as: 
* <pre>[94043,90210]</pre> 
*/ 
@Override public String toString() { 
    try { 
     JSONStringer stringer = new JSONStringer(); 
     writeTo(stringer); 
     return stringer.toString(); 
    } catch (JSONException e) { 
     return null; 
    } 
} 

/** 
* Encodes this array as a human readable JSON string for debugging, such 
* as: 
* <pre> 
* [ 
*  94043, 
*  90210 
* ]</pre> 
* 
* @param indentSpaces the number of spaces to indent for each level of 
*  nesting. 
*/ 
public String toString(int indentSpaces) throws JSONException { 
    JSONStringer stringer = new JSONStringer(indentSpaces); 
    writeTo(stringer); 
    return stringer.toString(); 
} 

Проблема заключается в том, что вам нужно преобразовать ChecklistAnswer в объект JSON первым для вашего JSONArray, чтобы работать должным образом.

Опять из Javadoc:

/** 
* A dense indexed sequence of values. Values may be any mix of 
* {@link JSONObject JSONObjects}, other {@link JSONArray JSONArrays}, Strings, 
* Booleans, Integers, Longs, Doubles, {@code null} or {@link JSONObject#NULL}. 
* Values may not be {@link Double#isNaN() NaNs}, {@link Double#isInfinite() 
* infinities}, or of any type not listed here. 

...

1

В моем классе ChecklistAnwer я добавил:

public JSONObject toJsonObject(){ 
    JSONObject json = new JSONObject(); 

    try { 
     json.put("questionId", questionId); 
     json.put("checklistId", checklistId); 
     json.put("answer", answer); 
     json.put("remark", remark); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    return json; 
} 

и в моем другом классе:

JSONArray answers = new JSONArray(); 

ChecklistAnswer answer = new ChecklistAnswer(questions.get(id).id, 2, cb.isChecked(),   text.getText().toString()); 

answers.put(answer.toJsonObject()); 

если я заполнил массив:

String js = answers.toString(1); 

и что возвращается:

[ 
{ 
    "answer": true, 
    "questionId": 1, 
    "remark": "", 
    "checklistId": 2 
}, 
{ 
    "answer": false, 
    "questionId": 4, 
    "remark": "teesxfgtfghyfj", 
    "checklistId": 2 
}, 
{ 
    "answer": true, 
    "questionId": 4, 
    "remark": "", 
    "checklistId": 2 
}, 
{ 
    "answer": true, 
    "questionId": 4, 
    "remark": "", 
    "checklistId": 2 
}, 
{ 
    "answer": true, 
    "questionId": 4, 
    "remark": "", 
    "checklistId": 2 
}, 
{ 
    "answer": true, 
    "questionId": 4, 
    "remark": "", 
    "checklistId": 2 
}, 
{ 
    "answer": true, 
    "questionId": 4, 
    "remark": "", 
    "checklistId": 2 
} 
] 

благодаря @Selvin

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