список строк не может быть преобразован в gson.JsonElement

#java #string #jsonelement

#java #строка #jsonelement

Вопрос:

Я хочу создать JSONObject в java такого типа:

 "a": "b",
"c": {
  "d": {
    "e": [
      "f",
      "g",
      "h"
    ]
  }
}
 

Ниже приведен фрагмент кода, в котором я пытаюсь добавить значение «e», заданное в виде списка:

 import com.google.gson.JsonObject;
import java.util.ArrayList;
List<String> arr = new ArrayList<String>();
arr.add("f");
arr.add("g");
arr.add("h");
JsonObject arrayList = new JsonObject();
arrayList.add("e", arr);
 

В этой части я получаю сообщение об ошибке:

java.util.List<java.lang.Строка> не может быть преобразована в com.google.gson.JsonElement Элемент

Любые предложения по решению этой проблемы будут оценены. Спасибо!

Ответ №1:

Попробуйте следующее

 arrayList.add("e", gson.toJsonTree(arr));
 

Комментарии:

1. Спасибо, Саад. Теперь эта строка компилируется. Однако в следующей строке я получаю сообщение об ошибке: списки фактических и формальных аргументов отличаются по длине

2. Спасибо, Саад. Теперь эта строка компилируется. Однако у меня также есть следующее: JSONArray arrayJson Json = new JSONArray(); arrayJson.add(«d», ArrayList). Здесь я получаю причину ошибки: списки фактических и формальных аргументов отличаются по длине. Не знаете почему?

3. JSONObject dObj = new JSONObject(); dObj.add(«d», ArrayList); System.out.println(dObj);

4. Спасибо, Саад. Это работает. Но допустим, если у меня есть что-то вроде «a»: «b», «c»: { «d»: { «e»: [ «f», «g», «h» ] «i»: [ «j», «k», «l», ] } } тогда должен ли я использовать JSONArray и как?

5. Вы можете создать и поместить объекты «e» и «i» в список и добавить этот список в «d»

Ответ №2:

Это скомпилировано и запущено без ошибок для меня:

 List<String> arr = new ArrayList<String>();
arr.add("f");
arr.add("g");
arr.add("h");
JsonObject arrayList = new JsonObject();
Gson gson = new Gson();
arrayList.add("e", gson.toJsonTree(arr));
 

Комментарии:

1. Спасибо, Майкл. Теперь эта строка компилируется. Однако у меня также есть следующее: JSONArray arrayJson Json = new JSONArray(); arrayJson.add(«d», ArrayList). Здесь я получаю причину ошибки: списки фактических и формальных аргументов отличаются по длине. Не знаете почему?

2. @CodingPractice — Если вы можете отредактировать свой исходный пост, а затем опубликовать свой полный класс, чтобы я мог видеть, что вы пытаетесь сделать, это помогло бы. Но вот определение класса для JSONArray, и вы видите, что именно вам разрешено передавать в массив. javadoc.io/doc/com.google.code.gson/gson/latest/com.google.gson /…