Как преобразовать строку в JsonObject с помощью библиотеки gson

93

Пожалуйста, посоветуйте, как преобразовать файл Stringв JsonObjectusing gsonlibrary.

Что я безуспешно делаю:

String string = "abcde";
Gson gson = new Gson();
JsonObject json = new JsonObject();
json = gson.toJson(string); // Can't convert String to JsonObject
Евгений
источник

Ответы:

29

Вам не нужно использовать 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)
Мэтт Болл
источник
38
Но мне нужно использовать JsonObject.
Евгений
3
потому что метод моего класса должен возвращать JsonObject.
Евгений
3
@Android: ... почему? JsonObjectявляется промежуточным представлением. В 99% случаев вам действительно следует заботиться только о представлении ваших данных в виде объекта Java или строки, содержащей JSON.
Мэтт Болл,
95
Вы не отвечаете на вопрос :) Конечно, бывают случаи, когда вам действительно нужно преобразовать String в JsonObject.
Олоф Ларссон
3
@MattBall В HTTP-библиотеке Ion ( github.com/koush/ion ) есть функция для установки тела HTTP-запроса в JsonObject.
Gagege
173

Вы можете преобразовать его в 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();
Eadjei
источник
«Assert» - это дополнительные вещи, предназначенные для тестирования.
Пареш Майани
9
Этот ответ фактически отвечает на заданный вопрос.
Janik Zikovsky 02
5
jsonParser.parse (json) .getAsJsonObject ();
Майк,
JsonObject jo = jsonParser.parse(json).getAsJsonObject();andAssert.assertTrue(jo.get("Success").getAsBoolean());
smac89
46

Чтобы сделать это проще, рассмотрим ниже:

JsonObject jsonObject = (new JsonParser()).parse(json).getAsJsonObject();
user2285078
источник
3
Вероятно, вы должны отметить, что это ранее было опубликовано как комментарий к другому ответу.
Натан Тагги
3
Извините, но без формата кода ... этот комментарий не в фокусе ... и этот на самом деле лучший ответ, чем другие
Анкит Бансал
31
String string = "abcde"; // The String which Need To Be Converted
JsonObject convertedObject = new Gson().fromJson(string, JsonObject.class);

Я так делаю, и это сработало.

CalvinChe
источник
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")например, вместо него.
Саймон Зеттервалл
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);
БАЙДЖУ ШАРМА
источник
4
Gson gson = new Gson();
YourClass yourClassObject = new YourClass();
String jsonString = gson.toJson(yourClassObject);
Тринад-Койя
источник
3
JsonObject jsonObject = (JsonObject) new JsonParser().parse("YourJsonString");
Удхая
источник
2

Обратите внимание, что в Gson 2.8.6 метод экземпляра JsonParser.parseустарел и заменен статическим методом JsonParser.parseString:

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
Кристиан С.
источник