Извлечь значение из строки, встречающейся после определенного слова - PullRequest
0 голосов
/ 06 марта 2019

Сценарий json передается в виде строки, и мне нужно извлечь числовое значение после content_id для дальнейшего сопоставления.Пример данных ниже:

{"url": {"phone": "videos/hssportint/hssport/jocaasd/6_3818e20a9e/19098311205/phone", "tv": "/mnt/c81292786e1e368e12144c302007/output/", "sample_aspect_ratio": "1:1", "subsample": 25,  "content_id": "1000231205", "encryption_enabled": false, "non_ad_time_intervals": [2330.68, 2898.36]], "packager_path": "/opt/bento4"}}], "vmaf_path": "/vmaf"}

Параметры являются динамическими, поэтому я не могу извлечь с помощью функции substr или счетчика для извлечения после определенного числа появлений специального символа.

Ответы [ 3 ]

0 голосов
/ 06 марта 2019

Вы можете использовать regexp_extract funciton в кусте с соответствующим регулярным выражением, чтобы извлечь только цифры из content_id.

Пример:

select regexp_extract(col1,'"content_id":\\s"(\\d+)"',1) from (
select string('{"url": {"phone": "videos/hssportint/hssport/jocaasd/6_3818e20a9e/19098311205/phone", "tv": "/mnt/c81292786e1e368e12144c302007/output/", "sample_aspect_ratio": "1:1", "subsample": 25,  "content_id": "1000231205", "encryption_enabled": false, "non_ad_time_intervals": [2330.68, 2898.36]], "packager_path": "/opt/bento4"}}], "vmaf_path": "/vmaf"}')col1
)t;
+-------------+--+
|     _c0     |
+-------------+--+
| 1000231205  |
+-------------+--+

Описание регулярного выражения:

"content_id":\\s"(\\d+)" //match literal "content_id": + any space + "digit inside quotes"
0 голосов
/ 06 марта 2019

Найден дорогой способ сделать это с помощью функции регулярных выражений и подстрок

substr(split(regexp_extract(message,'content_id([^&]*)'), '"')[3],1) as content_id
0 голосов
/ 06 марта 2019

JSON в вашем примере неверно сформирован, он содержит дополнительные ] и немного хвоста после закрытия }. Для корректного JSON вы можете использовать get_json_object, например:

select get_json_object(src_json,'$.url.content_id') from
    (
     select '{"url": {"phone": "videos/hssportint/hssport/jocaasd/6_3818e20a9e/19098311205/phone", "tv": "/mnt/c81292786e1e368e12144c302007/output/", "sample_aspect_ratio": "1:1", "subsample": 25,  "content_id": "1000231205", "encryption_enabled": false, "non_ad_time_intervals": [2330.68, 2898.36], "packager_path": "/opt/bento4"}}' as src_json 
     )s
    ;

Результат:

OK
1000231205
Time taken: 21.606 seconds, Fetched: 1 row(s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...