Como converter uma String em JsonObject usando a biblioteca gson

91

Por favor, conselhos sobre converter um Stringpara JsonObjectusar gsonbiblioteca.

O que eu faço sem sucesso:

String string = "abcde";
Gson gson = new Gson();
JsonObject json = new JsonObject();
json = gson.toJson(string); // Can't convert String to JsonObject
Eugene
fonte

Respostas:

30

Você não precisa usar JsonObject. Você deve usar Gson para converter de / para strings JSON e seus próprios objetos Java.

Consulte o Guia do usuário Gson :

(Serialização)

Gson gson = new Gson();
gson.toJson(1);                   // prints 1
gson.toJson("abcd");              // prints "abcd"
gson.toJson(new Long(10));        // prints 10
int[] values = { 1 };
gson.toJson(values);              // prints [1]

(Desserialização)

int one = gson.fromJson("1", int.class);
Integer one = gson.fromJson("1", Integer.class);
Long one = gson.fromJson("1", Long.class);
Boolean false = gson.fromJson("false", Boolean.class);
String str = gson.fromJson("\"abc\"", String.class);
String anotherStr = gson.fromJson("[\"abc\"]", String.class)
Matt Ball
fonte
36
Mas preciso usar o JsonObject.
Eugene
3
porque um método da minha classe deve retornar JsonObject.
Eugene
3
@Android: ... por quê? JsonObjecté uma representação intermediária. Em 99% dos casos de uso, você deve realmente se preocupar apenas em representar seus dados como um objeto Java ou como uma string contendo JSON.
Matt Ball
93
Você não respondeu à pergunta :) Claro que existem casos em que você realmente precisa converter uma String em um JsonObject.
Olof Larsson,
3
@MattBall Na biblioteca Ion http ( github.com/koush/ion ), há uma função para definir o corpo de uma solicitação http para um JsonObject.
Gagege de
169

Você pode convertê-lo em um JavaBean se quiser usar:

 Gson gson = new GsonBuilder().setPrettyPrinting().create();
 gson.fromJson(jsonString, JavaBean.class)

Para usar JsonObject, que é mais flexível, use o seguinte:

String json = "{\"Success\":true,\"Message\":\"Invalid access token.\"}";
JsonParser jsonParser = new JsonParser();
JsonObject jo = (JsonObject)jsonParser.parse(json);
Assert.assertNotNull(jo);
Assert.assertTrue(jo.get("Success").getAsString());

O que é equivalente ao seguinte:

JsonElement jelem = gson.fromJson(json, JsonElement.class);
JsonObject jobj = jelem.getAsJsonObject();
eadjei
fonte
"Assert" são os materiais extras, são para fins de teste.
Paresh Mayani
9
Essa resposta realmente responde à pergunta feita.
Janik Zikovsky
5
jsonParser.parse (json) .getAsJsonObject ();
Mike
JsonObject jo = jsonParser.parse(json).getAsJsonObject();eAssert.assertTrue(jo.get("Success").getAsBoolean());
smac89
44

Para fazer isso de uma forma mais simples, considere a seguir:

JsonObject jsonObject = (new JsonParser()).parse(json).getAsJsonObject();
user2285078
fonte
3
Você provavelmente deve notar que isso foi postado anteriormente como um comentário em outra resposta.
Nathan Tuggy
3
Desculpe, mas sem formato de código .. esse comentário está fora de foco .. e esta é realmente uma resposta melhor do que outras
Ankit Bansal
27
String string = "abcde"; // The String which Need To Be Converted
JsonObject convertedObject = new Gson().fromJson(string, JsonObject.class);

Eu faço isso e funcionou.

CalvinChe
fonte
8

Parece que a resposta acima não respondeu à pergunta completamente.

Acho que você está procurando algo como abaixo:

class TransactionResponse {

   String Success, Message;
   List<Response> Response;

}

TransactionResponse = new Gson().fromJson(response, TransactionResponse.class);

onde minha resposta é mais ou menos assim:

{"Success":false,"Message":"Invalid access token.","Response":null}

Como você pode ver, o nome da variável deve ser o mesmo que a representação da string Json da chave no par de valores de chave. Isso converterá automaticamente sua string gson em JsonObject.

Triguna
fonte
1
Por que você usa letras maiúsculas nas variáveis ​​de membro? Por que você usa o modificador de acesso padrão? Se você quiser letras maiúsculas na resposta, use @SerializedName("Success")por exemplo.
Simon Zettervall
7
String emailData = {"to": "[email protected]","subject":"User details","body": "The user has completed his training"
}

// Java model class
public class EmailData {
    public String to;
    public String subject;
    public String body;
}

//Final Data
Gson gson = new Gson();  
EmailData emaildata = gson.fromJson(emailData, EmailData.class);
BAIJU SHARMA
fonte
4
Gson gson = new Gson();
YourClass yourClassObject = new YourClass();
String jsonString = gson.toJson(yourClassObject);
Trinadh Koya
fonte
3
JsonObject jsonObject = (JsonObject) new JsonParser().parse("YourJsonString");
Udhaya
fonte
0

Observe que a partir do Gson 2.8.6 , o método de instância JsonParser.parsefoi descontinuado e substituído pelo método estático JsonParser.parseString:

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
Christian S.
fonte