У меня поток JSON генерируется программой на C++ на стороне сервера, которая в настоящее время находится в разработке. Мне дали образец полученного JSON, и я обеспокоен тем, что мне придется вручную разобрать json, что я не смогу использовать обычное сопоставление классов, предоставляемое такими инструментами, как GSON или Jackson.JSON to Java Объекты, лучшая практика для моделирования потока json
Пожалуйста, взгляните на следующий (несколько) надуманный пример, который они предоставили. Секции, которые меня интересуют, представляют собой метаданные «serie», имеющие разные параметры. Ключ - «ключ», например, присутствует только в одном из элементов массива. Не вызовет ли это проблемы, пытающиеся сопоставить этот массив с коллекцией определенного класса?
И наконец, я обеспокоен тем, что объект «point» не похож. Я очень слабо разбираюсь в JSON (будучи старомодным разработчиком java swing), но тот факт, что пары «ключевые точки» могут быть разными, - проблема.
Вся идея этого потока json состоит в том, чтобы описать таблицу, с помощью способов показать прогресс и предоставить механизм для запроса «большего количества» от основного оборудования. Также, если вам интересно, почему, я делюсь этим потоком данных с тонким клиентом (html-браузер).
Я исправлю, что это не будет легко преобразовать в объекты Java?
{
"abort": "abort;session=sessionname",
"data": {
"metadata": [
{
"protocol": "HTTP",
"serie": [
{
"name": "k1",
"description": "xDR ID",
"tooltip": "ASDR Unique Identifier - UiD",
"type": "int64",
"key": "1"
},
{
"name": "c1",
"description": "Answered",
"tooltip": "Request with Response",
"type": "bool"
},
{
"name": "c2",
"description": "Active",
"tooltip": "Session status: active or closed/down",
"type": "bool"
}
]
},
{
"protocol": "DNS",
"serie": [
{
"name": "k1",
"description": "xDR ID",
"tooltip": "ASDR Unique Identifier - UiD",
"type": "int64",
"key": "1"
},
{
"name": "k2",
"description": "Transaction ID",
"type": "int64",
"key": "1",
"display": "number"
},
{
"name": "k3",
"description": "Client",
"tooltip": "Source IP Address",
"type": "string",
"key": "1",
"display": "ip"
}
]
}
],
"summary": [
{
"timestamp": "1331192727",
"protocol": "HTTP",
"activity": "www.google.com",
"results": "OK",
"point": {
"k1": "1",
"c1": "true",
"c2": "true"
}
},
{
"timestamp": "1331192727",
"protocol": "DNS",
"activity": "www.google.com",
"results": "OK",
"point": {
"k1": "1",
"k2": "1.1.4.229"
}
}
]
},
"progress": {
"perc": "100"
},
"more": "13,39,1331192727,1331192760,27236,1.1.4.229,limit=1000,session=sessionname"
}
Благодарим за любые советы, которые вы можете предоставить.
-D Klotz
Спасибо. Если в json существует поле, но не в классе, что происходит? –
Я считаю, что он обычно генерирует исключение синтаксического анализа. Вы можете заставить игнорировать эти поля, создав «ExclusionStrategy», который исключает любое поле, которое не отображается в целевом классе. (Но настраиваемый десериализатор - лучший вариант) –
Я надеюсь избежать написания пользовательского десериализатора, так как я поймал это довольно рано в цикле разработки. Я еще немного поцарапаю себе голову. Спасибо за совет. –