Проблема разбора файла JSON - PullRequest
       12

Проблема разбора файла JSON

0 голосов
/ 24 октября 2018

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

Я не могу правильно проанализировать узел правил. ниже узла

"rules":{"540828":"Store_App_Fingerprint","576196":"App_email_domain"}

Пожалуйста, помогите, если я что-то упустил.

Структура файла выглядит примерно так.

{"country":"","auto":"R","orderNumber":"contraact123","language":"","rules":{"540828":"Store_App_Fingerprint","576196":"App_email_domain"},"deviceLayers":"...."
,"mode":"Q","score":"29","merchantId":"124300","vmax":"0","warningCount":0,"brand":"NONE","errorCount":0,"knowYourCustomer":"N","kaptcha":"N","counters":{},
"pcRemote":"","devices":"1""fingerPrint":""}

Код, который я пробовал.

select v.pkey as pkey,
parse_json(v.content):country::string as country ,
parse_json(v.content):auto::string as auto ,
parse_json(v.content):orderNumber::string as orderNumber 
,parse_json(v.content):language::string as language
,parse_json(v.content):rules::string as rules,
 parse_json(v.content):App_email_domain::string as App_email_domain ,
parse_json(v.content):deviceLayers::string as deviceLayers 

Может кто-нибудь, пожалуйста, поделитесь вашим опытом.

1 Ответ

0 голосов
/ 24 октября 2018

Существует несколько проблем с JSON, предоставленных вами:


Отсутствует , между devices & fingerPrint тегами

"устройства": "1" "fingerPrint": ""


Ваш тег rules похож на следующий

  "rules": {
      "540828":"Store_App_Fingerprint",
      "576196":"App_email_domain"
  }

Как видите, ключ 540828 & 576196, а не Store_App_Fingerprint & App_email_domain.

Если вы хотите получить доступ к rules.App_email_domain, вам нужно изменить свой JSON следующим образом:

"rules": {
    "Store_App_Fingerprint":"540828",
    "App_email_domain":"576196"
}

Свы пытаетесь выбрать элемент гнезда, вы должны использовать нотацию . для перехода к определенному полю.

например

Текущий: parse_json(column1):App_email_domain::string as App_email_domain

Обновлено: parse_json(column1):rules.App_email_domain::string as App_email_domain

Вот рабочий пример:

SELECT
    parse_json(column1):country::string as country
  , parse_json(column1):auto::string as auto
  , parse_json(column1):orderNumber::string as orderNumber 
  , parse_json(column1):language::string as language
  , parse_json(column1):rules::string as rules
  , parse_json(column1):rules.App_email_domain::string as App_email_domain
  , parse_json(column1):deviceLayers::string as deviceLayers
FROM VALUES
('{
    "country": "",
    "auto": "R",
    "orderNumber": "contraact123",
    "language": "",
    "rules": {
        "Store_App_Fingerprint": "540828",
        "App_email_domain": "576196"
    },
    "deviceLayers": "....",
    "mode": "Q",
    "score": "29",
    "merchantId": "124300",
    "vmax": "0",
    "warningCount": 0,
    "brand": "NONE",
    "errorCount": 0,
    "knowYourCustomer": "N",
    "kaptcha": "N",
    "counters": {},
    "pcRemote": "",
    "devices": "1",
    "fingerPrint": ""
}') v;

Результат:

+---------+------+--------------+----------+----------------------------------------------------------------+------------------+--------------+
| COUNTRY | AUTO | ORDERNUMBER  | LANGUAGE | RULES                                                          | APP_EMAIL_DOMAIN | DEVICELAYERS |
+---------+------+--------------+----------+----------------------------------------------------------------+------------------+--------------+
|         | R    | contraact123 |          | {"App_email_domain":"576196","Store_App_Fingerprint":"540828"} | 576196           | ....         |
+---------+------+--------------+----------+----------------------------------------------------------------+------------------+--------------+
...