Мне нужно проанализировать сложную строку 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» отсутствуют.
Я ожидаю извлечь каждое поле и сохранить значение в выделенных классах для будущего использования вне класса, который выполняет анализ.
Где это былоошибка?
Заранее спасибо за любые предложения