一、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;