Объект Java в JSON с использованием GSON - PullRequest
1 голос
/ 19 сентября 2019

У меня есть массив объектов, представляющий собой список значений аргументов, которые может принимать функция.Это может быть любой сложный объект.

Я пытаюсь построить json из массива объектов, используя gson, как показано ниже:

private JsonArray createArgsJsonArray(Object... argVals) {
    JsonArray argsArray = new JsonArray();
    Arrays.stream(argVals).forEach(arg -> argsArray.add(gson.toJson(arg)));
    return argsArray;
}
  1. При этом все значения arg обрабатываются как String.
  2. Он избегает строковых аргументов

    "args":["\"STRING\"","1251996697","85"]
    

Я предпочитаю следующий вывод:

   "args":["STRING",1251996697,85]

Есть ли способдобиться этого с помощью gson?

Я использовал org.json, мне удалось достичь желаемого результата, но он не работает для сложных объектов.

РЕДАКТИРОВАТЬ:

Iприменил решение, предоставленное @ Michał Ziober, но теперь, как мне вернуть объект.

Gson gson = new Gson();
Object strObj = "'";
JsonObject fnObj = new JsonObject();
JsonObject fnObj2 = new JsonObject();
fnObj.add("response", gson.toJsonTree(strObj));
fnObj2.addProperty("response", gson.toJson(strObj));

System.out.println(gson.fromJson(fnObj.toString(), 
Object.class)); --> prints {response='}   //Not what I want!
System.out.println(gson.fromJson(fnObj2.toString(), 
Object.class)); --> prints {response="\u0027"}

Ответы [ 3 ]

3 голосов
/ 19 сентября 2019

Использование toJsonTree метод:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import java.util.Date;

public class GsonApp {

  public static void main(String[] args) {
    GsonApp app = new GsonApp();
    System.out.println(app.createArgsJsonArray("text", 1, 12.2D));
    System.out.println(app.createArgsJsonArray(new Date(), new A(), new String[] {"A", "B"}));
  }

  private Gson gson = new GsonBuilder().create();

  private JsonArray createArgsJsonArray(Object... argVals) {
    JsonArray argsArray = new JsonArray();

    for (Object arg : argVals) {
      argsArray.add(gson.toJsonTree(arg));
    }

    return argsArray;
  }
}

class A {
  private int id = 12;
}

Над отпечатками кода:

["text",1,12.2]
["Sep 19, 2019 3:25:20 PM",{"id":12},["A","B"]]
1 голос
/ 19 сентября 2019

Попробуйте использовать setPrettyPrinting с DisableHtml экранированием.

Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
 JsonParser jp = new JsonParser();
 JsonElement je = jp.parse(jsonArray.toString());
 System.out.println( gson.toJson(je));
0 голосов
/ 19 сентября 2019

Если вы хотите получить строку, просто сделайте:

private String createArgsJsonArray(Object... argVals) {
    Gson gson = new Gson();
    return gson.toJson(argVals);
}

Если вы хотите собрать ее и изменить, просто сделайте:

Object[] o = new Gson().fromJson(argValsStr, Object[].class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...