Пользовательский десериализатор Gson для вложенного JSONJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Пользовательский десериализатор Gson для вложенного JSON

Сообщение 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"
}
]
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... ested-json
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»