Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / парсинг недоджейсона / 12 сообщений из 12, страница 1 из 1
14.10.2016, 13:25
    #39327036
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг недоджейсона
Народ, такая ситуация. Народ в java делает типа джейсон, но не создает наименования полей для экономии места, но очень бы хотелось парсить его средствами оракла, чтобы не городить велосипед. Есть какие-нибудь мысли?

Пример json:
Код: plaintext
1.
2.
3.
{
"data":[[26,"Alex",2],[17,"Tom",1],[31,"Jane",1],[18,"Dim"1]]
}

я бы хотел получить каждый элемент массива отдельной строкой и соответственно три столбца.

Единственная мысль - это вписывать как-нибудь имена полей фейковые а-ля a, b, c, но так как джейсоны могут быть довольно большие (clob) не хотелось бы на это заморачиваться, ибо придётся писать процедурную логику, которая рано или поздно сглючит и очевидно будет ещё и тормозить.
...
Рейтинг: 0 / 0
14.10.2016, 14:11
    #39327083
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг недоджейсона
в последнем элементе косяк:
Код: plaintext
1.
2.
3.
{
"data":[[26,"Alex",2],[17,"Tom",1],[31,"Jane",1],[18,"Dim",1]]
}
...
Рейтинг: 0 / 0
14.10.2016, 14:20
    #39327094
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг недоджейсона
Shtock,

pipelined + substr в цикле - 5 минут....
...
Рейтинг: 0 / 0
14.10.2016, 14:27
    #39327103
Alexander A. Sak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг недоджейсона
Почему это назвали недоджейсоном? Нормальный массив массивов по ключу "data". Я подобное в браузер гоняю, только еще рядом имена полей передаю.
Или Оракл не умеет парсить произвольный JSON? Простите, не силен по этой части.
...
Рейтинг: 0 / 0
14.10.2016, 14:32
    #39327108
just_vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг недоджейсона
Alexander A. SakПочему это назвали недоджейсоном? Нормальный массив массивов по ключу "data". Я подобное в браузер гоняю, только еще рядом имена полей передаю.
Или Оракл не умеет парсить произвольный JSON? Простите, не силен по этой части.
+1, нормальный себе JSON, скопируйте в консоль любого браузера и убедитесь, что без единого слова ругани конвертнется в javascript объект.
...
Рейтинг: 0 / 0
14.10.2016, 14:32
    #39327109
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг недоджейсона
Ага, про массив я уже догнал, но пока не понимаю, как в json_table в json path указать номер элемента в массиве по индексу.
...
Рейтинг: 0 / 0
14.10.2016, 15:23
    #39327177
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг недоджейсона
just_vladimir+1, нормальный себе JSON

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SQL> CREATE TABLE TBL(JSON_DATA CLOB)
  2  /

Table created.

SQL> ALTER TABLE TBL
  2    ADD CONSTRAINT ensure_json
  3      CHECK(JSON_DATA IS JSON)
  4  /

Table altered.

SQL> INSERT INTO TBL (JSON_DATA)
  2      VALUES ('{
  3                       "data":[[26,"Alex",2],[17,"Tom",1],[31,"Jane",1],[18,"Dim"1]]
  4                      }')
  5  /
INSERT INTO TBL (JSON_DATA)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.ENSURE_JSON) violated


SQL>



SY.
...
Рейтинг: 0 / 0
14.10.2016, 15:25
    #39327178
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг недоджейсона
Упс, не заметил, "в последнем элементе косяк".

SY.
...
Рейтинг: 0 / 0
14.10.2016, 15:43
    #39327194
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг недоджейсона
ShtockАга, про массив я уже догнал, но пока не понимаю, как в json_table в json path указать номер элемента в массиве по индексу.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
SELECT  *
  FROM  JSON_TABLE(
                   '
                    {
                     "data":[[26,"Alex",2],[17,"Tom",1],[31,"Jane",1],[18,"Dim",1]]
                    }
                   ',
                   '$.data[*][*]'
                   columns
                     item VARCHAR2(20) PATH '$'
                  )
/

ITEM
--------------------
26
Alex
2
17
Tom
1
31
Jane

ITEM
--------------------
1
18
Dim
1

12 rows selected.

SQL> 



SY.
...
Рейтинг: 0 / 0
14.10.2016, 16:05
    #39327217
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг недоджейсона
Ага, спасибо. Догнал до моего косяка - я настойчиво ставил точку перед []
...
Рейтинг: 0 / 0
14.10.2016, 16:06
    #39327220
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг недоджейсона
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT  *
  FROM  JSON_TABLE(
                   '
                    {
                     "data":[[26,"Alex",2],[17,"Tom",1],[31,"Jane",1],[18,"Dim",1]]
                    }
                   ',
                   '$.data[*]'
                   columns
                     id VARCHAR2(20) PATH '$[0]',
                     name VARCHAR2(20) PATH '$[1]',
                     type VARCHAR2(20) PATH '$[2]'
                  )
...
Рейтинг: 0 / 0
14.10.2016, 16:07
    #39327223
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг недоджейсона
собственно вот итоговая версия чего мне надо было. спасибо за идею.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / парсинг недоджейсона / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]