Cara mengonversi String ke JsonObject menggunakan perpustakaan gson

94

Mohon saran bagaimana mengubah a Stringmenjadi JsonObjectmenggunakan gsonperpustakaan.

Apa yang saya tidak berhasil lakukan:

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

Jawaban:

29

Anda tidak perlu menggunakan JsonObject. Anda harus menggunakan Gson untuk mengonversi ke / dari string JSON dan objek Java Anda sendiri.

Lihat Panduan Pengguna Gson :

(Serialisasi)

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]

(Deserialization)

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
sumber
38
Tapi saya perlu menggunakan JsonObject.
Eugene
3
karena metode kelas saya harus mengembalikan JsonObject.
Eugene
3
@Android: ... kenapa? JsonObjectadalah representasi perantara. Dalam 99% kasus penggunaan, Anda harus benar-benar hanya peduli tentang merepresentasikan data Anda sebagai objek Java, atau sebagai string yang berisi JSON.
Matt Ball
95
Anda tidak menjawab pertanyaan :) Tentu saja ada beberapa kasus ketika Anda benar-benar perlu mengonversi String menjadi JsonObject.
Olof Larsson
3
@MattBall Di perpustakaan Ion http ( github.com/koush/ion ) ada fungsi untuk mengatur isi permintaan http ke JsonObject.
Gagege
173

Anda bisa mengubahnya menjadi JavaBean jika Anda ingin menggunakan:

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

Untuk menggunakan JsonObject, yang lebih fleksibel, gunakan yang berikut ini:

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

Yang mana setara dengan berikut ini:

JsonElement jelem = gson.fromJson(json, JsonElement.class);
JsonObject jobj = jelem.getAsJsonObject();
eadjei
sumber
"Tegaskan" adalah barang ekstra, itu untuk tujuan pengujian.
Paresh Mayani
9
Jawaban ini sebenarnya menjawab pertanyaan seperti yang ditanyakan.
Janik Zikovsky
5
jsonParser.parse (json) .getAsJsonObject ();
Mike
JsonObject jo = jsonParser.parse(json).getAsJsonObject();danAssert.assertTrue(jo.get("Success").getAsBoolean());
smac89
46

Untuk melakukannya dengan cara yang lebih sederhana, pertimbangkan di bawah ini:

JsonObject jsonObject = (new JsonParser()).parse(json).getAsJsonObject();
pengguna2285078
sumber
3
Anda mungkin harus memperhatikan bahwa ini sebelumnya telah diposting sebagai komentar pada jawaban lain.
Nathan Tuggy
3
Maaf, tetapi tanpa format kode .. komentar itu tidak fokus .. dan yang ini sebenarnya adalah jawaban yang lebih baik dari yang lain
Ankit Bansal
31
String string = "abcde"; // The String which Need To Be Converted
JsonObject convertedObject = new Gson().fromJson(string, JsonObject.class);

Saya melakukan ini, dan berhasil.

CalvinChe
sumber
8

Sepertinya jawaban di atas tidak menjawab pertanyaan dengan lengkap.

Saya pikir Anda mencari sesuatu seperti di bawah ini:

class TransactionResponse {

   String Success, Message;
   List<Response> Response;

}

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

di mana tanggapan saya kira-kira seperti ini:

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

Seperti yang Anda lihat, nama variabel harus sama dengan representasi string Json dari kunci dalam pasangan nilai kunci. Ini secara otomatis akan mengubah string gson Anda menjadi JsonObject.

Triguna
sumber
1
Mengapa Anda menggunakan huruf besar pada variabel anggota? Mengapa Anda menggunakan pengubah akses default? Jika Anda ingin huruf besar dalam respons, gunakan @SerializedName("Success")sebagai gantinya.
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
sumber
4
Gson gson = new Gson();
YourClass yourClassObject = new YourClass();
String jsonString = gson.toJson(yourClassObject);
Trinadh Koya
sumber
3
JsonObject jsonObject = (JsonObject) new JsonParser().parse("YourJsonString");
Udhaya
sumber
2

Perhatikan bahwa mulai Gson 2.8.6 , metode instance JsonParser.parsesudah tidak digunakan lagi dan diganti dengan metode statis JsonParser.parseString:

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