Я работаю над разбором строки json, хранящейся в таблице CLOB в oracle 11g. Этот процесс является частью длинной процедуры разбора, которая анализирует данные и сохраняет значения в другой таблице, и я только заметил, что часть моих данных не выходит. Json анализирует и проверяет с помощью JSONLint. Поэтому я упростил синтаксический анализ, чтобы попытаться выяснить, где я ошибаюсь.Списки сообщений PL/JSON
Так что мой json, выходящий из моего стола, выглядит так.
{
"JSON_data": {
"plant_id": "3006",
"transmit_time": "2015-12-18 11:57:45",
"messages": [{
"work_msg": {
"msg_time": "2015-06-23 04:54:17",
"trigger_type": "interval",
"vert_correction": 358.3,
"ch_latitude": 37.916302,
"ch_longitude": -87.487365,
"ch_heading": 212.3,
"ch_cable_port": 1029.79,
"ch_cable_stbd": 348.63,
"ch_depth": -27.03,
"slurry_velocity": 25.71,
"slurry_density": 1.02,
"ch_rpm": 205.49,
"ch_psi": 540.89,
"prod_instantaneous": 0,
"prod_cumulative": 1216.100000,
"outfall_latitude": 37.915967,
"outfall_longitude": -87.484369,
"outfall_heading": 120.7,
"pump_entries": [{
"pump_name": "main",
"vacuum": 12.73,
"outlet_psi": 22.88
}],
"spud_entries": [{
"position": 6
}]
},
"pipe_length_event": {
"msg_time": "2015-06-23 04:54:17",
"length_floating": 970
}
}]
}
}
Мой синтаксический анализ правильно находит и выполняет свою работу с данными «work_msg». Это данные «pipe_length_event», к которым я не привык. Ниже приведена моя упрощенная процедура pl/sql.
DECLARE
vCONTENT CLOB;
v_parent_json json;
v_json_message_list json_list;
v_json_message_list_value json_value;
v_parent_json_value json_value;
BEGIN
SELECT CONTENT INTO vCONTENT FROM SJM_TEMP4;
v_parent_json := json(vCONTENT);
v_parent_json := json(v_parent_json.get(1));
v_json_message_list := json_list(v_parent_json.get('messages'));
DBMS_OUTPUT.PUT_LINE(v_json_message_list.count);
for message_loop_counter in 1 ..v_json_message_list.count loop
v_parent_json_value := json(v_json_message_list.get(message_loop_counter)).get(1);
DBMS_OUTPUT.PUT_LINE(v_parent_json_value.mapname);
END LOOP;
END;
Мой DBMS_OUTPUT первый дает мне количество суб-лист 1. Не 2, так мой разборе даже не распознающий «pipe_length_event» как подсписком «сообщения».
Как получить данные «pipe_length_event», используя эту процедуру? Я почти уверен, что это работало в прошлом, поэтому моя первая мысль заключается в том, что json отформатирован по-разному. Неужели json плохо отформатирован?
Заранее спасибо.