Использование массива «my-systems» бесполезно, если все, что вы делаете, это поддерживаете свои ключи уникальными. (Я предполагаю, что ваша SYSTEM_A может отличаться). Вместо этого я предлагаю вам отформатировать данные JSON следующим образом:
{
"my-systems": [
{
"system-name" : {
"name":"System_A",
"parameters": [
{
"parameter-name": "a_param1",
"parameter-display-name": "parameter 1",
"optional": "true"
},
{
"parameter-name": "a_param2",
"parameter-display-name": "Parameter 2",
"optional": "false"
}
]
}
}
]
}
Этот метод является чистым и позволяет вам перехватить имя системы в свойстве system-name и параметры вложены внутрь. Вы можете просто объявить модель, и Джексон (или gson) просто позаботится обо всем.
Если вы предпочитаете анализировать ответ отдельно или у вас нет контроля над ответом, вы можете выбрать go с вашей реализацией, но вам не нужно конвертировать в ObjectNode. Вы можете использовать приведенные ниже примеры внутри вашего для l oop:
String f2Str = jsonNode.get("f2").asText();
double f2Dbl = jsonNode.get("f2").asDouble();
int f2Int = jsonNode.get("f2").asInt();
long f2Lng = jsonNode.get("f2").asLong();
, где 'f2' - ваш ключ, и вы можете получить ключ, используя node.fieldNames (). Next (), что на самом деле получение свойства от итератора.
Вы также можете попробовать те из них, которые ниже, кажется, они лучше обрабатываются.
JsonNode parent = ...;
for (Iterator<String> it = parent.fieldNames() ; it.hasNext() ; ) {
String field = it.next();
System.out.println(field + " => " + parent.get(field));
}
for (Iterator<Map.Entry<String,JsonNode>> it = parent.fields() ;
it.hasNext() ; ) {
Map.Entry<String,JsonNode> e = it.next();
System.out.println(e.getKey() + " => " + e.getValue());
}
Последние примеры взяты из здесь . Надеюсь, это поможет.