Чтение объекта Json и сохранение необходимых значений на карте - PullRequest
0 голосов
/ 25 марта 2019

У меня есть объект JSON, содержащий имя и атрибут.Мне нужно сохранить выбранные значения на карте / пользовательском объекте.

ниже - мой объект JSON, где мне нужно учитывать значения final и official, равные Prm и Total Load AmtCom Load Amt из load.эти 4 значения мне нужно, чтобы добавить его в пользовательский объект и использовать его для дальнейшей манипуляции.

{
  "qObject": {
    "element": [
      {
        "name": "PO",
        "attribute": [
          {
            "name": "PO_DT",
            "value": "2017-01-25"
          },
          {
            "name": "POEN_DT",
            "value": "2017-02-24"
          }
        ]
      },
      {
        "name": "DETAILS",
        "attribute": [
          {
            "name": "ZZ_CD",
            "value": "COM"
          },
          {
            "name": "ZZBO_CD",
            "value": "5"
          },
          {
            "name": "ZZEX_CD",
            "value": "PRI"
          },
          {
            "name": "ZZRE_CD",
            "value": "WST"
          }
        ]
      },
      {
        "name": "Prm",
        "attribute": [
          {
            "name": "Theoritical",
            "value": "0.0000"
          },
          {
            "name": "Final",
            "value": "741.7513"
          },
          {
            "name": "Official",
            "value": "1009.9481"
          }
        ]
      },
      {
        "name": "Load",
        "attribute": [
          {
            "name": "TotalLoadPercentage",
            "value": "27.6900"
          },
          {
            "name": "TotalLoadAmt",
            "value": "268.1968"
          },
          {
            "name": "ComLoadPercentage",
            "value": "5"
          },
          {
            "name": "ComLoadAmt",
            "value": "50.4974"
          }
        ]
      }
    ]
  }
}

Мне нужно хранить значения "name": "Total Load Amt "name": "Com Load Amt "name": "Final" и"name": "Official" ниже Пользовательский объект

 public Class customObject {
private String totalLoadAmt;
private String comLoadAmt;
private String finalval;
private String official;
}

Как это сделать в Java?Я думал об использовании карты, но это не сработало, как ожидалось.Любые предложения или предложения будут полезны.Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 25 марта 2019

Вы можете создать свой пользовательский класс как:

@Getter
@Setter
public class CustomObject {
    private  Map<String, List<Element>> qObject;
}
@Getter
@Setter
public class Element {

    private String name;
    private List<Attribute> attribute;
}

@Getter
@Setter
public class Attribute {

    private String name;
    private String value;
}

Теперь вы можете десериализовать свой JSON как:

 Gson gson = new Gson();
 CustomObject jsonObject = gson.fromJson(json,CustomObject.class);
 System.out.println(jsonObject);
1 голос
/ 25 марта 2019

Вам нужно создать классы с текущим полем для отображения строки JSON. Gson использует тип переменной и имя для разбора. Сеттеры и геттеры не обязательны, их можно создавать только в нужных классах. Если вы не хотите читать все это =) суть всего кода


Создать класс для основного элемента json с полем Map qObject для отображения массива json:

public static class CustomJsonObject {
    private Map<String, List<Element>> qObject;

    // getters and setters
}

Затем вам нужно создать класс для сопоставления любых элементов в массиве json "element" с полями String name и List attribute:

public static class Element {
    private String name;
    private List<Attributes> attribute;

    // getters and setters
}

Затем вам нужно создать класс для сопоставления любых элементов в массиве «атрибут» json с полями String name и String value:

public static class Attributes {
    private String name;
    private String value;

    // getters and setters
}

После создания этих классов вы можете написать:

CustomJsonObject customJsonObject = new Gson().fromJson(jsonStr, CustomJsonObject.class);

И получить класс со всей информацией JSON. Следующий шаг - найти текущие данные и поместить их в ваш класс. Вы можете использовать для этого stream-api или foreach, если и т.д. Мой полный код я вставил в gist .

1 голос
/ 25 марта 2019

Вы можете использовать класс Gson для анализа json.


Gson gson = new Gson();
pcResponseType = gson.fromJson(jsonString,PcResponseType.class);

После чего вы сможете получить любые поля, которые вы хотите получить и установить на карте.

Я надеюсь, что понял ваш вопрос и ответил соответственно.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...