Не могу понять это. Я пытаюсь манипулировать деревом JSON в GSON, но у меня есть случай, когда я не знаю, или у меня нет POJO для преобразования строки до преобразования в JsonObject
. Есть ли способ перейти непосредственно от String
к JsonObject
?
Я пробовал следующее (синтаксис Scala):
val gson = (new GsonBuilder).create
val a: JsonObject = gson.toJsonTree("""{ "a": "A", "b": true }""").getAsJsonObject
val b: JsonObject = gson.fromJson("""{ "a": "A", "b": true }""", classOf[JsonObject])
но a
терпит неудачу, JSON экранируется и анализируется как JsonString
единственный, и
b
возвращает пустое JsonObject
.
Любые идеи?
Ответы:
использовать JsonParser; например:
источник
new JsonParser().parse(..).getAsJsonObject();
JsonParser.parseString(str).getAsJsonObject()
.Попробуйте использовать
getAsJsonObject()
вместо прямого броска, используемого в принятом ответе:источник
members
родительским ключом. Вот пример {"members": {"key1": "13756963814f2c594822982c0307fb81", "key2": true, "key3": 123456789}}JsonObject jsonObj = JsonParser.parseString(str).getAsJsonObject()
илиGson gson = new Gson(); JsonElement element = gson.fromJson (jsonStr, JsonElement.class); JsonObject jsonObj = element.getAsJsonObject();
источник
JsonObject
определение класса? Это происходит из библиотеки Google Gson. Вы можете обратиться к документации здесь .Самый простой способ - использовать
JsonPrimitive
класс, который наследуетсяJsonElement
, как показано ниже:источник
Просто столкнулся с той же проблемой. Вы можете написать тривиальный пользовательский десериализатор для
JsonElement
класса:источник
Я считаю, что это более легкий подход:
И тогда вы сможете назвать это так:
Таким образом, все спящие объекты будут автоматически преобразованы.
источник
JsonParser
Конструктор устарел. Вместо этого используйте статический метод:источник
Наткнулся на сценарий с удаленной сортировкой хранилища данных в EXTJS 4.X, где строка отправляется на сервер в виде массива JSON (всего 1 объект).
Подобный подход к тому, что представлен ранее для простой строки, просто необходимо преобразовать в JsonArray сначала до JsonObject.
Строка от клиента: [{"property": "COLUMN_NAME", "direction": "ASC"}]
источник
источник