Objeto Java para JSON usando Gson

user2761431:

Eu tenho uma matriz de objeto que é uma lista de valores de argumento uma função poderia tomar. Isto poderia ser qualquer objeto complexo.

Eu estou tentando construir um fora json da matriz de objectos utilizando Gson como abaixo:

private JsonArray createArgsJsonArray(Object... argVals) {
    JsonArray argsArray = new JsonArray();
    Arrays.stream(argVals).forEach(arg -> argsArray.add(gson.toJson(arg)));
    return argsArray;
}
  1. Tudo isso trata os valores arg como string.
  2. Ela escapa os argumentos de corda

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

Eu prefiro o seguinte resultado:

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

Existe uma maneira de conseguir isso usando Gson?

Eu costumava org.json, eu era capaz de alcançar o resultado desejado, mas ele não funciona para objetos complexos.

EDITAR:

Eu apliquei a solução fornecida por @ Michał Ziober, mas agora como faço para obter de volta o objeto.

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"}
Michael Ziober:

Use toJsonTreemétodo:

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;
}

impressões código acima:

["text",1,12.2]
["Sep 19, 2019 3:25:20 PM",{"id":12},["A","B"]]

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=317403&siteId=1
Recomendado
Clasificación