gpt4 book ai didi

mysql - JSON_EXTRACT 函数上的索引不返回数据

转载 作者:行者123 更新时间:2023-11-29 16:06:34 26 4
gpt4 key购买 nike

我的问题是,当我尝试使用 mysql 函数 JSON_EXTRACT 获取数据时,问题是我使用索引 [0] 进行操作,一切正常,但是当我请求下一个 [1] 时,返回 null。我尝试过没有索引来了解搜索如何返回我的所有 json 数据,当我尝试获取超过 0 位置的索引位置时,不返回任何数据,只返回 null。这是我的示例代码:

set @example = '{"product":{
"id_product":1,
"quantity":1
},
"product":{
"id_product":3,
"quantity":4
},
"product":{
"id_product":5,
"quantity":2
}
}';

select JSON_EXTRACT(@example, '$.product[0].id_product'); -- Returns '1'
select JSON_EXTRACT(@example, '$.product[1].id_product'); -- Returns null, should be '3'

我想知道如果不是真的像这样使用的话到底是如何工作的。
提前致谢。

最佳答案

最后一个重复键获胜

11.6 The JSON Data Type :: Normalization, Merging, and Autowrapping of JSON Values

...

This "last duplicate key wins" behavior is suggested by RFC 7159 and is implemented by most JavaScript parsers.

...

In versions of MySQL prior to 8.0.3, members with keys that duplicated a key found earlier in the document were discarded.

...

示例:

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.0.15 |
+-----------+
1 row in set (0.00 sec)

mysql> SET @`example` := '{
'> "product": {
'> "id_product": 1,
'> "quantity": 1
'> },
'> "product": {
'> "id_product": 3,
'> "quantity": 4
'> },
'> "product": {
'> "id_product": 5,
'> "quantity": 2
'> }
'> }';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT JSON_VALID(@`example`);
+------------------------+
| JSON_VALID(@`example`) |
+------------------------+
| 1 |
+------------------------+
1 row in set (0.01 sec)

mysql> SELECT JSON_LENGTH(@`example`);
+-------------------------+
| JSON_LENGTH(@`example`) |
+-------------------------+
| 1 |
+-------------------------+
1 row in set (0.00 sec)

mysql> SELECT JSON_EXTRACT(@`example`, '$.product');
+---------------------------------------+
| JSON_EXTRACT(@`example`, '$.product') |
+---------------------------------------+
| {"quantity": 2, "id_product": 5} |
+---------------------------------------+
1 row in set (0.00 sec)

一些选项

选项 0:

mysql> SET @`example` := '{
'> "product_0": {
'> "id_product": 1,
'> "quantity": 1
'> },
'> "product_1": {
'> "id_product": 3,
'> "quantity": 4
'> },
'> "product_2": {
'> "id_product": 5,
'> "quantity": 2
'> }
'> }';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT JSON_VALID(@`example`);
+------------------------+
| JSON_VALID(@`example`) |
+------------------------+
| 1 |
+------------------------+
1 row in set (0.00 sec)

mysql> SELECT JSON_LENGTH(@`example`);
+-------------------------+
| JSON_LENGTH(@`example`) |
+-------------------------+
| 3 |
+-------------------------+
1 row in set (0.00 sec)

mysql> SELECT
-> JSON_EXTRACT(@`example`, '$.product_0.id_product'),
-> JSON_EXTRACT(@`example`, '$.product_1.id_product'),
-> JSON_EXTRACT(@`example`, '$.product_2.id_product')\G
*************************** 1. row ***************************
JSON_EXTRACT(@`example`, '$.product_0.id_product'): 1
JSON_EXTRACT(@`example`, '$.product_1.id_product'): 3
JSON_EXTRACT(@`example`, '$.product_2.id_product'): 5
1 row in set (0.00 sec)

选项 1:

mysql> SET @`example` := '[
'> {
'> "product": {
'> "id_product": 1,
'> "quantity": 1
'> }
'> },
'> {
'> "product": {
'> "id_product": 3,
'> "quantity": 4
'> }
'> },
'> {
'> "product": {
'> "id_product": 5,
'> "quantity": 2
'> }
'> }]';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT JSON_VALID(@`example`);
+------------------------+
| JSON_VALID(@`example`) |
+------------------------+
| 1 |
+------------------------+
1 row in set (0.00 sec)

mysql> SELECT JSON_LENGTH(@`example`);
+-------------------------+
| JSON_LENGTH(@`example`) |
+-------------------------+
| 3 |
+-------------------------+
1 row in set (0.00 sec)

mysql> SELECT
-> JSON_EXTRACT(@`example`, '$[0].product.id_product'),
-> JSON_EXTRACT(@`example`, '$[1].product.id_product'),
-> JSON_EXTRACT(@`example`, '$[2].product.id_product')\G
*************************** 1. row ***************************
JSON_EXTRACT(@`example`, '$[0].product.id_product'): 1
JSON_EXTRACT(@`example`, '$[1].product.id_product'): 3
JSON_EXTRACT(@`example`, '$[2].product.id_product'): 5
1 row in set (0.00 sec)

关于mysql - JSON_EXTRACT 函数上的索引不返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55691338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com