Преобразовать jsonobject в строку, используя проблему gson - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь преобразовать JsonObject в String с помощью библиотеки GSON. Но результат вывода будет иметь еще один слой родительской «карты», обертывающий json. Пожалуйста, дайте мне знать, что я неправильно сделал, почему появится слой родительского "Карта"?

Я даже пытаюсь скрыть bean-компонент с помощью new Gson (). ToJson (bean); но у выходного результата также есть еще один слой родительской карты, обертывающий json.

Условие, которое я должен выполнить, используя

1) Mutable object
2) GSON
3) method might handle other object Type

Проект Maven с использованием библиотеки ниже:

<dependency>
  <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

Java-код ниже (пример для понимания только не реального кода, будет использоваться в T):

List<JSONObject> records = new ArrayList <JSONObject> ();           
JSONObject bean = new JSONObject();

bean.put("A", "is A");    
bean.put("B", "is B lah");    
bean.put("C", "is C lah");    
bean.put("D", "is D");    

records.add(bean);

String JSONBody2 = new Gson().toJson(records);

Я ожидаю, что выход [{"D":"is D","A":"is A","B":"is B lah","C":"is C lah"}]

но фактический результат [{"map":{"D":"is D","A":"is A","B":"is B lah","C":"is C lah"}}]

Фактический код указан ниже

public String Json( String json, List<T>  list) {
   String JSONBody = new Gson().toJson(list);
}

Мне нужно сериализовать с помощью gson, поэтому я поставил T., но я понятия не имею, почему здесь появилась «карта». как и раньше, он работает без родительской «карты». (тот же код и та же библиотека, только что созданный проект, но с этой проблемой)

Ответы [ 3 ]

0 голосов
/ 19 июня 2019

1001 * попробовать *

  String JSONBody2 = record.toString());

даст вам [{"A": "is A", "B": "is B lah", "C": "is C lah", "D": "is D"}]

Вы можете лучше понять преобразование типов по этой ссылке https://stackoverflow.com/a/27893392/4500099

0 голосов
/ 19 июня 2019

Не используйте объект JSON. Просто используйте Object

    List<Object> records = new ArrayList<>();
    Map<String, String> bean = new HashMap<>();

    bean.put("A", "is A");
    bean.put("B", "is B lah");
    bean.put("C", "is C lah");
    bean.put("D", "is D");
    records.add(bean);


    String JSONBody2 = new Gson().toJson(records);
    System.out.println(JSONBody2);

Выход

[{"A":"is A","B":"is B lah","C":"is C lah","D":"is D"}]

Если вы посмотрите на реализацию org.json.JSONObject, он внутри содержит переменную map, в которой хранятся все данные. Это конструктор

public JSONObject() {
    this.map = new HashMap<String, Object>();
}

Когда GSON пытается преобразовать в JSON, он просто рекурсивно просматривает объект и преобразует все переменные в JSON. Так что в этом случае он преобразует внутреннюю карту, которая отображается в выводе Json.

0 голосов
/ 19 июня 2019

Используйте JSONArray вместо списка, это даст вам желаемый результат:

JSONArray  records = new JSONArray();           
JSONObject bean = new JSONObject();

bean.put("A", "is A");
bean.put("B", "is B lah");    
bean.put("C", "is C lah");    
bean.put("D", "is D");    

records.put(bean);

String JSONBody2 = new Gson().toJson(records);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...