У меня есть приведенный ниже JSON. Я хочу иметь возможность хранить его в экземпляре класса Java. Я думаю, что для этого мне нужен собственный десериализатор. У меня есть рабочий код, который может создать JsonObject строки JSON верхнего уровня «response_object», а затем я могу спуститься вниз, чтобы получить такие вещи, как массив файлов. Мой вопрос: могу ли я написать собственный десериализатор, который начинается на верхнем уровне, получает JsonObject объекта ответа и возвращает экземпляр.
Например, этот экспериментальный код подводит меня к массив файлов, и я могу получить определенные значения. Из моего чтения я думаю, что могу создать класс, называемый чем-то вроде ResponseObject, который реализует десериализатор, который принимает JsonObject и в основном использует его для установки свойств и/или создания экземпляров вложенных классов (которые также должны быть определены, и я думаю нужны свои десериализаторы). Я прав?
JsonObject robj = value.getAsJsonObject("response_object");
JsonArray uarray = robj.getAsJsonArray("updates");
for(int i1 = 0; i1 < uarray.size(); i1++) {
JsonElement jel = uarray.get(i1);
JsonObject jobj = jel.getAsJsonObject();
String v = jobj.get("upgrades_to_version").getAsString();
JsonArray files = jobj.getAsJsonArray("files");
for (int ij = 0; ij < files.size(); ij++ ) {
JsonElement fel = files.get(ij);
JsonObject fobj = fel.getAsJsonObject();
url = fobj.get("url").getAsString();
}
}
"response_object" : {
"asset_type" : "software",
"asset_virtual_id" : "Instance_Cluster-0001",
"category" : "Software",
"connect_transaction_id" : "11223344_1714400505026_Event-000001",
"efd_transaction_id" : "H17246155",
"event_time" : "2024-09-25 21:43:42",
"event_time_ms" : 1727300622750,
"event_type" : "software_update",
"group" : "foo",
"instance" : "0123456789abcdef",
"response_code" : 200,
"response_size" : 997,
"software_update_request" : {
"asset_event_detail" : {
"body" : {
"action" : "Order SW",
"component" : "compid_xx",
"description" : "Orderfix",
"efd_product" : "Log Collector",
"operation" : "order_software",
"request_type" : "specific_fix",
"update_ids" : [
"1.0.1.0-fix001"
]
},
"header" : {
"event_id" : "11223344_1714400505026_SWupdate-000002",
"event_time" : "2024-04-29 09:00:00",
"event_time_ms" : 1714400505026,
"event_type" : "software_update"
}
}
},
"times" : {
"efd_delta" : "1.5 seconds",
"efd_recv" : 1727300622749,
"efd_send" : 1727300621292
},
"type" : "11223344",
"updates" : [
{
"applies_to_version" : "v1.0.1.0",
"description" : "This is the initial release",
"files" : [
{
"description" : "Runnable Jar File",
"descriptor" : "data/installable-unit.fix",
"hash" : "AHcK2tBVoETIZcINUefJcLrZmNxFFMyFnjEj4dCcc+8=",
"hashAlgorithm" : "SHA-256",
"size" : 14787032,
"url" : "https://example.com/runnable1.jar",
"url_type" : "edge"
},
{
"description" : "Runnable",
"descriptor" : "some_description",
"hash" : "foo",
"hashAlgorithm" : "SHA-256",
"size" : 14787032,
"url" : "https://example.com/runnable2.jar",
"url_type" : "edge"
}
],
"id" : "1.0.1.0-fix001",
"name" : "Initial Release 001",
"release_date" : "2024-04-25T18:42:00.382Z",
"status" : "available",
"type" : "fix pack",
"upgrades_to_version" : "v1.0.1.0"
}
]
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... ested-json
Пользовательский десериализатор Gson для вложенного JSON ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1731380198
Anonymous
У меня есть приведенный ниже JSON. Я хочу иметь возможность хранить его в экземпляре класса Java. Я думаю, что для этого мне нужен собственный десериализатор. У меня есть рабочий код, который может создать JsonObject строки JSON верхнего уровня «response_object», а затем я могу спуститься вниз, чтобы получить такие вещи, как массив файлов. Мой вопрос: могу ли я написать собственный десериализатор, который начинается на верхнем уровне, получает JsonObject объекта ответа и возвращает экземпляр.
Например, этот экспериментальный код подводит меня к массив файлов, и я могу получить определенные значения. Из моего чтения я думаю, что могу создать класс, называемый чем-то вроде ResponseObject, который реализует десериализатор, который принимает JsonObject и в основном использует его для установки свойств и/или создания экземпляров вложенных классов (которые также должны быть определены, и я думаю нужны свои десериализаторы). Я прав?
JsonObject robj = value.getAsJsonObject("response_object");
JsonArray uarray = robj.getAsJsonArray("updates");
for(int i1 = 0; i1 < uarray.size(); i1++) {
JsonElement jel = uarray.get(i1);
JsonObject jobj = jel.getAsJsonObject();
String v = jobj.get("upgrades_to_version").getAsString();
JsonArray files = jobj.getAsJsonArray("files");
for (int ij = 0; ij < files.size(); ij++ ) {
JsonElement fel = files.get(ij);
JsonObject fobj = fel.getAsJsonObject();
url = fobj.get("url").getAsString();
}
}
"response_object" : {
"asset_type" : "software",
"asset_virtual_id" : "Instance_Cluster-0001",
"category" : "Software",
"connect_transaction_id" : "11223344_1714400505026_Event-000001",
"efd_transaction_id" : "H17246155",
"event_time" : "2024-09-25 21:43:42",
"event_time_ms" : 1727300622750,
"event_type" : "software_update",
"group" : "foo",
"instance" : "0123456789abcdef",
"response_code" : 200,
"response_size" : 997,
"software_update_request" : {
"asset_event_detail" : {
"body" : {
"action" : "Order SW",
"component" : "compid_xx",
"description" : "Orderfix",
"efd_product" : "Log Collector",
"operation" : "order_software",
"request_type" : "specific_fix",
"update_ids" : [
"1.0.1.0-fix001"
]
},
"header" : {
"event_id" : "11223344_1714400505026_SWupdate-000002",
"event_time" : "2024-04-29 09:00:00",
"event_time_ms" : 1714400505026,
"event_type" : "software_update"
}
}
},
"times" : {
"efd_delta" : "1.5 seconds",
"efd_recv" : 1727300622749,
"efd_send" : 1727300621292
},
"type" : "11223344",
"updates" : [
{
"applies_to_version" : "v1.0.1.0",
"description" : "This is the initial release",
"files" : [
{
"description" : "Runnable Jar File",
"descriptor" : "data/installable-unit.fix",
"hash" : "AHcK2tBVoETIZcINUefJcLrZmNxFFMyFnjEj4dCcc+8=",
"hashAlgorithm" : "SHA-256",
"size" : 14787032,
"url" : "https://example.com/runnable1.jar",
"url_type" : "edge"
},
{
"description" : "Runnable",
"descriptor" : "some_description",
"hash" : "foo",
"hashAlgorithm" : "SHA-256",
"size" : 14787032,
"url" : "https://example.com/runnable2.jar",
"url_type" : "edge"
}
],
"id" : "1.0.1.0-fix001",
"name" : "Initial Release 001",
"release_date" : "2024-04-25T18:42:00.382Z",
"status" : "available",
"type" : "fix pack",
"upgrades_to_version" : "v1.0.1.0"
}
]
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79179472/gson-custom-deserializer-for-nested-json[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия