2016-02-05 2 views
0

Привет Я пользуюсь простой библиотекой JSON. У меня есть JSON-файл, как это:JSON Simple - Кодирующий массив

[ 
    "string", 
    { 
     ... 
    }, 
    { 
     ... 
    } 
    ... 
] 

У меня нет никаких проблем при разборе его. Но когда я заканчиваю свое приложение и пытаюсь сохранить изменения, я не могу добавить строку в новый JSONArray.

JSONArray array = new JSONArray(); 
array.add("string"); 

Это дает мне add(E) in ArrayList cannot be applied to (java.lang.String) Ошибка.
В классе JSONArray нет метода put.
Решение может преобразовывать JSONObject в JSONArray. Но как?

Или я могу разобрать файл и изменить его, а затем перезаписать исходный файл?

Посмотрите на примере 2-1
https://code.google.com/archive/p/json-simple/wikis/EncodingExamples.wiki

EDIT: Используя приведенный ниже код всегда выдает ошибку. Я считаю, что объект JSONArray не предназначен для кодирования. Вместо этого я использовал LinkedList.

JSONObject obj = new JSONObject(); 
JSONArray array = new JSONArray(); 
array.add("string"); // gives error 
array.add(obj); // gives error 
+0

Вы должны использовать jsonObj вместо объектов String, чтобы проверить это [POST] (http://stackoverflow.com/questions/13963751/json-add-to-jsonarray-issue). – NAIT

+0

@ NAIT No, все еще такой же проблема. функция добавления не работает. – ossobuko

+0

Можете ли вы опубликовать то, что вы пробовали, пожалуйста? – NAIT

ответ

0
LinkedList list = new LinkedList(); 
list.add("foo"); 
list.add(new Integer(100)); 
list.add(new Double(1000.21)); 
list.add(new Boolean(true)); 
list.add(null); 
String jsonText = JSONValue.toJSONString(list); 
System.out.print(jsonText); 

Вместо создания JSONArray объекта и добавления других объектов к нему, мы можем создать LinkedList.

Тогда используйте его, поскольку мы намерены использовать объект JSONArray. И, наконец, мы можем преобразовать его в строку JSON.

Проблема может быть в том, что текст ошибки подсказывает, что JSONArray, который расширяет ArrayList, не имеет набора шаблонов. Он по-прежнему по умолчанию E. Поэтому, когда вы пытаетесь добавить объект в ArrayList, он дает ошибку, потому что объект не является экземпляром E. Класс JSONArray не принимает шаблон.

JSONArray<String> array = new JSONArray<String>(); 

Просто не работает.

0

Вы можете добавить объект Json вместо добавления строкового объекта.

JSONObject jsonObj = new JSONObject("{\""string",\":\"{}\"}"); 
JSONArray array = new JSONArray(); 
array.add(jsonObj); 
0

Убедитесь, что вы используете правильный JSONArray. В приведенном примере используется

import org.json. простой .JSONArray;

+0

Это было первое, что я проверил. – ossobuko