JSON 使用 Snowflake 查询
JSON query with Snowflake
你好,我有下面的 json 字段(地址簿列表),我试图在其中提取 addr1,但我的代码结果为 NULL
有人可以帮忙吗?
查询-
select
addressbooklist:addressbook.addressbookAddress.addr1 as test,
from customer;
JSON 字段
{
"addressbook": [
{
"addressbookAddress": {
"addr1": "701 N. Brand Boulevard",
"addr2": null,
"addr3": null,
"addrPhone": null,
"addrText": "Executive Software International<br>701 N. Brand Boulevard<br>Glendale CA 912031242<br>United States",
"addressee": "Executive Software International",
"attention": null,
"city": "Glendale",
"country": {
"value": "_unitedStates"
},
"customFieldList": null,
"internalId": null,
"nullFieldList": null,
"override": false,
"state": "CA",
"zip": "912031242"
},
"defaultBilling": false,
"defaultShipping": true,
"internalId": "1587207",
"isResidential": false,
"label": "701 N. Brand Boulevard"
},
{
"addressbookAddress": {
"addr1": "701 N. Brand Boulevard",
"addr2": null,
"addr3": null,
"addrPhone": null,
"addrText": "Executive Software International<br>701 N. Brand Boulevard<br>Glendale CA 912031242<br>United States",
"addressee": "Executive Software International",
"attention": null,
"city": "Glendale",
"country": {
"value": "_unitedStates"
},
"customFieldList": null,
"internalId": null,
"nullFieldList": null,
"override": false,
"state": "CA",
"zip": "912031242"
},
"defaultBilling": true,
"defaultShipping": false,
"internalId": "1587208",
"isResidential": false,
"label": "701 N. Brand Boulevard"
}
],
"replaceAll": false
}
了解您要使用哪种语言会有所帮助。我只需要用 mySQL 来做这件事。这样的事情可能会有所帮助:
select
yourField->>'$."addressbookAddress"[0].addr1' 作为地址
从你的桌子
其中 1
您的 json 文档 addressbook
元素是一个数组,而不是普通的 属性。您可以使用 [0]
符号引用数组中的特定元素(0=第一个元素,1=第二个,...)。您的查询将如下所示:
select addressbooklist:addressbook[0].addressbookAddress.addr1 as test from customer;
如果您想要在结果中包含所有地址簿项目,您可以使用这种查询来展平 json 结构:
select ab.value:addressbookAddress.addr1 as test
from customer
, lateral flatten(input => addressbooklist:addressbook) ab;
结果:
TEST
"701 N. Brand Boulevard"
"701 N. Brand Boulevard"
有关 Snowflake json 数组语法的更多信息,请参见此处:
您引用的 JSON
对象具有以下结构:
Array[Object1{key1: value, key2: value}, Object2{key1: value, key2: value}]
Object1
是数组的第一项,索引为 0,Object2
的索引为 1,依此类推。
您可以访问数组中的一个项目,例如 Array[0]
,您可以访问对象内部的一个值,例如 Object1.key1
。在此示例中,您可以联系 key1
,例如 Array[0]Object1.key1
。
在您的情况下,您可以在第一个对象中访问 addr1
,如下所示:
addressbook[0].addressbookAddress.addr1
你好,我有下面的 json 字段(地址簿列表),我试图在其中提取 addr1,但我的代码结果为 NULL 有人可以帮忙吗?
查询-
select
addressbooklist:addressbook.addressbookAddress.addr1 as test,
from customer;
JSON 字段
{
"addressbook": [
{
"addressbookAddress": {
"addr1": "701 N. Brand Boulevard",
"addr2": null,
"addr3": null,
"addrPhone": null,
"addrText": "Executive Software International<br>701 N. Brand Boulevard<br>Glendale CA 912031242<br>United States",
"addressee": "Executive Software International",
"attention": null,
"city": "Glendale",
"country": {
"value": "_unitedStates"
},
"customFieldList": null,
"internalId": null,
"nullFieldList": null,
"override": false,
"state": "CA",
"zip": "912031242"
},
"defaultBilling": false,
"defaultShipping": true,
"internalId": "1587207",
"isResidential": false,
"label": "701 N. Brand Boulevard"
},
{
"addressbookAddress": {
"addr1": "701 N. Brand Boulevard",
"addr2": null,
"addr3": null,
"addrPhone": null,
"addrText": "Executive Software International<br>701 N. Brand Boulevard<br>Glendale CA 912031242<br>United States",
"addressee": "Executive Software International",
"attention": null,
"city": "Glendale",
"country": {
"value": "_unitedStates"
},
"customFieldList": null,
"internalId": null,
"nullFieldList": null,
"override": false,
"state": "CA",
"zip": "912031242"
},
"defaultBilling": true,
"defaultShipping": false,
"internalId": "1587208",
"isResidential": false,
"label": "701 N. Brand Boulevard"
}
],
"replaceAll": false
}
了解您要使用哪种语言会有所帮助。我只需要用 mySQL 来做这件事。这样的事情可能会有所帮助:
select yourField->>'$."addressbookAddress"[0].addr1' 作为地址 从你的桌子 其中 1
您的 json 文档 addressbook
元素是一个数组,而不是普通的 属性。您可以使用 [0]
符号引用数组中的特定元素(0=第一个元素,1=第二个,...)。您的查询将如下所示:
select addressbooklist:addressbook[0].addressbookAddress.addr1 as test from customer;
如果您想要在结果中包含所有地址簿项目,您可以使用这种查询来展平 json 结构:
select ab.value:addressbookAddress.addr1 as test
from customer
, lateral flatten(input => addressbooklist:addressbook) ab;
结果:
TEST
"701 N. Brand Boulevard"
"701 N. Brand Boulevard"
有关 Snowflake json 数组语法的更多信息,请参见此处:
您引用的 JSON
对象具有以下结构:
Array[Object1{key1: value, key2: value}, Object2{key1: value, key2: value}]
Object1
是数组的第一项,索引为 0,Object2
的索引为 1,依此类推。
您可以访问数组中的一个项目,例如 Array[0]
,您可以访问对象内部的一个值,例如 Object1.key1
。在此示例中,您可以联系 key1
,例如 Array[0]Object1.key1
。
在您的情况下,您可以在第一个对象中访问 addr1
,如下所示:
addressbook[0].addressbookAddress.addr1