Как разобрать сложную строку JSon с помощью javax.json.bind-api - PullRequest
0 голосов
/ 02 июля 2019

Мне нужно проанализировать сложную строку JSon, которая возвращается из запроса graphql в базу данных Mongo.Эта строка JSon может быть немного изменена в основе выполненного запроса

. В моей системе доступен API javax.json.bind, и я хотел бы определить синтаксический анализатор как можно более гибкий и общий с этим API.

Пример этой строки JSon следующий:

{
  "data": {
    "tbFD": {
      "uid": "74d378bb-f995-4521-8686-d08a552d87ec",
      "eanCode": "0716736038353",
      "catUid": "b00558ff-2556-437a-88cc-ac7c6e879f2a",
      "globalFId": 1,
      "cSG": [],
      "tbFV": {
        "uid": "3d96a05c-8076-4e38-9b2d-51077eef4367",
        "fSize": null,
        "bSize": 21,
        "eSize": 47,
        "otherO": "",
        "catUid": "b00558ff-2556-437a-88cc-ac7c6e879f2a",
        "tbFM": {
          "uid": "79cc8002-6501-4010-b280-5fab143a478d",
          "catUid": "b00558ff-2556-437a-88cc-ac7c6e879f2a",
          "name": "CA6645",
          "fType": "PLASTIC",
          "remoteEnabled": true,
          "tbCO": {
            "uid": "81f0c1c7-d2e4-44ed-8632-b38b77a9eba8",
            "name": "CARRERA VISTA",
            "catUid": "b00558ff-2556-437a-88cc-ac7c6e879f2a"
          },
          "tbBR": {
            "uid": "bcb0310b-1e3a-4489-b7e5-9eb94d93b201",
            "name": "CARRERA",
            "catUid": "b00558ff-2556-437a-88cc-ac7c6e879f2a"
          }
        }
      }
    }
  },
  "errors": [],
  "extensions": null
}

В данный момент я пишу следующий код

        String key="", value="";
    Map<String,String> retValue=new HashMap<String,String>();

    //Define JSon parser
    JsonParser jsonParser = Json.createParser(new StringReader(jsonText));

    //Parse the JSon string
    while (jsonParser.hasNext()){
        JsonParser.Event event = jsonParser.next();
        switch(event) {
            case START_ARRAY:
            case END_ARRAY:
            case START_OBJECT:
            case END_OBJECT:
                break;
            case KEY_NAME:
                if (!key.equalsIgnoreCase(jsonParser.getString())){
                    if (!key.isEmpty()){
                        //Store the combination key + value
                        System.out.print("Key : " + key + " - Value : " + value);
                        retValue.put(key,value);
                        value="";
                    }
                }
                key=jsonParser.getString();
                System.out.print(event.toString() + " " + key + " - ");
                break;
            case VALUE_NULL:
                break;
            case VALUE_FALSE:
                value="false";
                System.out.println(event.toString() + " " + value);
                break;
            case VALUE_TRUE:
                value="true";
                System.out.println(event.toString() + " " + value);
                break;
            case VALUE_STRING:
            case VALUE_NUMBER:
                value=jsonParser.getString();
                System.out.println(event.toString() + " " + value);
                break;
        }
    }

Но не возвращает все поля,например, элементы «tbBR» отсутствуют.

Я ожидаю извлечь каждое поле и сохранить значение в выделенных классах для будущего использования вне класса, который выполняет анализ.

Где это былоошибка?

Заранее спасибо за любые предложения

...