```json{
"number": 123,
"date": "2020-11-01",
"last_date": "2020-12-30"
}```
我正在尝试使用多种方法提取键,但我的零件是无效的,因此我必须强行将``在空白中替换为空白并提取信息。我认为这个论坛可以比我更好地帮助我。
below代码有效,但我认为这不是从JSON中提取的正确方法
SELECT
REPLACE(json_extract(json_extract((replace(REPLACE(FIELD_NAME,"```json",""),"```","")),"$"),"$[number]"),"\"","") as number
FROM
Table
您可以使用以下查询:
with table AS (
select json_object(
'number', 123,
'date', '2020-11-01',
'last_date','2020-12-30',
'array', ['0','1','2']
) as json
)
select
json_value(json, '$.number') as number -- To get the number
, json_value(json, '$.date') as date_ -- To get the date
, json_value_array(json, '$.array') as array_ -- To get the array
, json_value(json, '$.object.foo') as foo -- To get the value of foo
, json_value(json, '$.object.bar') as bar -- To get the value of bar
from table
(),对于数组,您可以使用
JSON_VALUE_ARRAY()。如果您有任何高级案例,只需阅读示例并稍微播放。
今天使用ml.generate_text时,我遇到了类似的问题。
提取我使用的响应
WITH
myjson AS (
SELECT '```json\n{"field_a": "a string", "field_b": {"a_secondary": 0, "b_secondary": 1}}\n```' AS a_weird_json_string
),
extract_json AS (
SELECT
*,
REGEXP_EXTRACT(a_weird_json_string, r'({.*})') AS json_content
FROM myjson
)
SELECT
a_weird_json_string,
JSON_VALUE(json_content, '$.field_a') AS field_a_preprocessed,
JSON_VALUE(json_content, '$.field_b.a_secondary') AS field_b_a_secondary_preprocessed,
-- On original string we get Null
JSON_VALUE(a_weird_json_string, '$.field_a') AS field_a_value,
JSON_EXTRACT(a_weird_json_string, '$.field_a') AS field_a_extract,
-- PARSE_JSON(a_weird_json_string) AS parsed_json -- Yield an Invalid input: syntax error while parsing value - invalid literal; last read: '`'; error in PARSE_JSON expression
FROM extract_json