Jak przekonwertować String na JsonObject przy użyciu biblioteki gson

93

Proszę o poradę, jak przekonwertować bibliotekę Stringna JsonObjectużywanie gson.

Co bezskutecznie robię:

String string = "abcde";
Gson gson = new Gson();
JsonObject json = new JsonObject();
json = gson.toJson(string); // Can't convert String to JsonObject
Eugene
źródło

Odpowiedzi:

29

Nie musisz używać JsonObject. Powinieneś używać Gson do konwersji do / z ciągów JSON i własnych obiektów Java.

Zobacz podręcznik użytkownika Gson :

(Serializacja)

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]

(Deserializacja)

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
źródło
38
Ale muszę użyć JsonObject.
Eugene,
3
ponieważ metoda mojej klasy powinna zwracać JsonObject.
Eugene,
3
@Android: ... dlaczego? JsonObjectjest reprezentacją pośrednią. W 99% przypadków użycia naprawdę powinieneś przejmować się przedstawieniem danych jako obiektu Java lub jako ciągu znaków zawierającego JSON.
Matt Ball
95
Nie odpowiadasz na pytanie :) Są oczywiście przypadki, w których faktycznie musisz przekonwertować String na JsonObject.
Olof Larsson
3
@MattBall W bibliotece Ion http ( github.com/koush/ion ) znajduje się funkcja ustawiania treści żądania http na obiekt JsonObject.
Gagege
173

Możesz przekonwertować go na JavaBean, jeśli chcesz, używając:

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

Aby użyć JsonObject, który jest bardziej elastyczny, użyj następujących elementów:

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());

Co jest równoważne z następującym:

JsonElement jelem = gson.fromJson(json, JsonElement.class);
JsonObject jobj = jelem.getAsJsonObject();
eadjei
źródło
„Assert” to dodatkowe elementy, służy do celów testowych.
Paresh Mayani
9
Ta odpowiedź faktycznie odpowiada na zadane pytanie.
Janik Zikovsky,
5
jsonParser.parse (json) .getAsJsonObject ();
Mike
JsonObject jo = jsonParser.parse(json).getAsJsonObject();iAssert.assertTrue(jo.get("Success").getAsBoolean());
smac89
45

Aby zrobić to w prostszy sposób, rozważ poniżej:

JsonObject jsonObject = (new JsonParser()).parse(json).getAsJsonObject();
user2285078
źródło
3
Prawdopodobnie powinieneś zauważyć, że zostało to wcześniej opublikowane jako komentarz do innej odpowiedzi.
Nathan Tuggy,
3
Przepraszamy, ale bez formatu kodu ... ten komentarz jest nieostry ... a ten jest rzeczywiście lepszą odpowiedzią niż inne
Ankit Bansal
31
String string = "abcde"; // The String which Need To Be Converted
JsonObject convertedObject = new Gson().fromJson(string, JsonObject.class);

Robię to i zadziałało.

CalvinChe
źródło
8

Wygląda na to, że powyższa odpowiedź nie odpowiedziała całkowicie na pytanie.

Myślę, że szukasz czegoś takiego jak poniżej:

class TransactionResponse {

   String Success, Message;
   List<Response> Response;

}

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

gdzie moja odpowiedź brzmi mniej więcej tak:

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

Jak widać, nazwa zmiennej powinna być taka sama, jak reprezentacja ciągu Json klucza w parze klucz-wartość. Spowoduje to automatyczną konwersję ciągu gson do JsonObject.

Triguna
źródło
1
Dlaczego używasz wielkich liter w zmiennych składowych? Dlaczego używasz domyślnego modyfikatora dostępu? Jeśli chcesz, aby odpowiedź była wielka, użyj @SerializedName("Success")na przykład.
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
źródło
4
Gson gson = new Gson();
YourClass yourClassObject = new YourClass();
String jsonString = gson.toJson(yourClassObject);
Trinadh Koya
źródło
3
JsonObject jsonObject = (JsonObject) new JsonParser().parse("YourJsonString");
Udhaya
źródło
2

Zwróć uwagę, że od wersji Gson 2.8.6 metoda wystąpienia JsonParser.parsezostała wycofana i zastąpiona metodą statyczną JsonParser.parseString:

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
Christian S.
źródło