一、JSON_EXTRACT()函數(shù)
JSON_EXTRACT()函數(shù)是用于從JSON對象中提取值的函數(shù)。它的語法如下:
JSON_EXTRACT(json_data, path[, path] ...)
其中:
? "json_data":表示要解析的JSON數(shù)據(jù)。
? "path":表示要提取的值在JSON數(shù)據(jù)中的路徑??梢允褂命c號(.)分隔層級。
示例:
假設(shè)我們有一個名為"users"的表,其中有一個名為"info"的JSON類型的列,存儲了用戶的一些附加信息?,F(xiàn)在我們想要提取用戶的名字。
SELECT JSON_EXTRACT(info, '$.name') as name FROM users;
二、->運算符和->>運算符
在某些數(shù)據(jù)庫系統(tǒng)中,如MySQL和PostgreSQL,我們還可以使用“->”和“->>”運算符來提取JSON數(shù)據(jù)。這兩個運算符的區(qū)別在于它們返回的數(shù)據(jù)類型。“->”返回的是JSON類型,而“->>”返回的是基本類型。
1. ->運算符:
SELECT info->'$.name' as name FROM users;
2. ->>運算符:
SELECT info->>'$.name' as name FROM users;
三、JSON_TABLE()函數(shù)(僅適用于PostgreSQL)
如果我們使用的是PostgreSQL數(shù)據(jù)庫,那么我們還可以使用JSON_TABLE()函數(shù)來解析JSON數(shù)據(jù)。這個函數(shù)可以將JSON數(shù)據(jù)轉(zhuǎn)換為關(guān)系表,然后我們可以在查詢結(jié)果中直接訪問這些數(shù)據(jù)。它的語法如下:
SELECT * FROM json_table(json_data, 'paths' COLUMNS (column_name data_type [AS alias]));
其中:
? "json_data":表示要解析的JSON數(shù)據(jù)。
? "paths":表示JSON數(shù)據(jù)的路徑??梢允褂命c號(.)分隔層級。例如,'{"a": {"b": "c"}}' 的路徑為 'a.b'。
? "COLUMNS"子句用于定義輸出表的列和它們的數(shù)據(jù)類型??梢詾槊總€列指定一個別名。
? "*"表示輸出所有列。如果只需要部分列,可以將列名用逗號分隔。
示例:
假設(shè)我們有一個名為"orders"的表,其中有一個名為"details"的JSON類型的列,存儲了訂單的一些詳細(xì)信息?,F(xiàn)在我們想要提取訂單的數(shù)量和價格。
SELECT quantity, price FROM orders;