Як перетворити рядок у JsonObject за допомогою бібліотеки gson


91

Будь ласка, порада, як перетворити a Stringна JsonObjectвикористання gsonбібліотеки.

Що я невдало роблю:

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

Відповіді:


28

Вам не потрібно користуватися JsonObject. Ви повинні використовувати Gson для перетворення в / з рядків JSON та власних об'єктів Java.

Див. Посібник користувача Gson :

(Серіалізація)

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]

(Десериалізація)

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)

36
Але мені потрібно використовувати JsonObject.
Євген

3
оскільки метод мого класу повинен повертати JsonObject.
Євген

3
@Android: ... чому? JsonObjectє проміжним поданням. У 99% випадків використання вам дійсно слід турбуватися лише про те, щоб представляти свої дані як об'єкт Java або як рядок, що містить JSON.
Matt Ball

95
Ви не відповідаєте на запитання :) Звичайно, бувають випадки, коли вам насправді потрібно перетворити String на JsonObject.
Олоф Ларссон,

3
@MattBall У бібліотеці Ion http ( github.com/koush/ion ) є функція встановлення тіла запиту http на JsonObject.
Gagege

169

Ви можете перетворити його на JavaBean, якщо хочете використовувати:

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

Щоб використовувати JsonObject, який є більш гнучким, використовуйте наступне:

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

Що еквівалентно наступному:

JsonElement jelem = gson.fromJson(json, JsonElement.class);
JsonObject jobj = jelem.getAsJsonObject();

"Затверджувати" - це зайві продукти, це призначено для тестування.
Пареш Маяні

9
Ця відповідь насправді відповідає на запитання, задане.
Янік Зіковський

5
jsonParser.parse (json) .getAsJsonObject ();
Mike

JsonObject jo = jsonParser.parse(json).getAsJsonObject();іAssert.assertTrue(jo.get("Success").getAsBoolean());
smac89

44

Щоб зробити це простіше, розглянемо нижче:

JsonObject jsonObject = (new JsonParser()).parse(json).getAsJsonObject();

3
Напевно, слід зауважити, що це раніше було опубліковано як коментар до іншої відповіді.
Nathan Tuggy

3
Вибачте, але без формату коду .. цей коментар розфокусований .. і цей насправді є кращою відповіддю за інші
Ankit Bansal

28
String string = "abcde"; // The String which Need To Be Converted
JsonObject convertedObject = new Gson().fromJson(string, JsonObject.class);

Я роблю це, і це спрацювало.


8

Схоже, наведена вище відповідь не дала відповіді на запитання повністю.

Я думаю, ви шукаєте щось на зразок нижче:

class TransactionResponse {

   String Success, Message;
   List<Response> Response;

}

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

де моя відповідь приблизно така:

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

Як бачите, ім'я змінної має збігатися з поданням рядка Json ключа в парі значень ключа. Це автоматично перетворить ваш рядок gson у JsonObject.


1
Чому ви використовуєте великі регістри для змінних-членів? Чому ви використовуєте модифікатор доступу за замовчуванням? Якщо вам потрібна велика буква у відповіді, тоді використовуйте, @SerializedName("Success")наприклад, замість цього.
Simon Zettervall

7
String emailData = {"to": "abc@abctest.com","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);



1

Зверніть увагу, що станом на Gson 2.8.6 метод екземпляру JsonParser.parseзастарів та замінений статичним методом JsonParser.parseString:

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.