JSON 文件解析问题

JSON file parsing issue

我有一个 json 文件,我正试图在 snowflake 数据库 中解析该文件。 我能够解析除规则之外的所有节点。

我无法正确解析规则节点。 节点下方

"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 

是否有人可以分享您的专业知识。

您提供的 JSON 几乎没有问题:


devicesfingerPrint 标签之间缺少 ,

"devices":"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"
}

由于您正在尝试 select 嵌套元素,因此您应该使用 . 符号导航到特定字段。

例如

当前: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           | ....         |
+---------+------+--------------+----------+----------------------------------------------------------------+------------------+--------------+