首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么json_extract可以工作,而json_extract_scalar不能?

JSON_EXTRACT和JSON_EXTRACT_SCALAR是MySQL数据库中用于提取JSON数据的函数。

JSON_EXTRACT函数用于提取JSON数据中的指定字段或路径的值。它可以返回一个JSON对象、一个JSON数组或一个标量值。JSON_EXTRACT函数可以用于任何JSON数据类型的字段,包括对象、数组和标量值。

JSON_EXTRACT_SCALAR函数与JSON_EXTRACT函数类似,但它只返回标量值,即字符串、数字、布尔值或NULL。它不能返回JSON对象或JSON数组。

原因是JSON_EXTRACT函数可以返回复杂的JSON结构,包括对象和数组,而JSON_EXTRACT_SCALAR函数只能返回简单的标量值。这是因为JSON_EXTRACT_SCALAR函数的设计初衷是为了提取JSON数据中的单个值,而不是整个JSON结构。

举个例子来说明,假设有一个JSON数据如下:

{ "name": "John", "age": 30, "address": { "street": "123 Main St", "city": "New York" }, "hobbies": ["reading", "traveling"] }

如果我们使用JSON_EXTRACT函数提取"name"字段的值,可以使用以下语句:

SELECT JSON_EXTRACT(json_data, '$.name') FROM table_name;

这将返回字符串"John"。

如果我们使用JSON_EXTRACT_SCALAR函数提取"name"字段的值,可以使用以下语句:

SELECT JSON_EXTRACT_SCALAR(json_data, '$.name') FROM table_name;

这同样也将返回字符串"John"。

总结起来,JSON_EXTRACT函数可以提取复杂的JSON结构,而JSON_EXTRACT_SCALAR函数只能提取简单的标量值。具体使用哪个函数取决于你需要提取的数据类型。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL 5.7新特性| Json Column 和 Generated Column(上)

MySQL5.7 新增两种字段类型:Json 和 Generated,Generated 型的产生和 Json 的关系密不可分,如果没有Generated 类型,Json 类型在强大,生产中可能也无法使用,因为 Json 不支持索引,但是如果要查询 Json 里的数据,没有索引就是全表扫描,在执行效率上肯定是不能用于生产环境的,但是有了 Generated 类型就不同了,Generated 类型简单地说是一个虚拟字段,值是不可更新的,值来源其他字段或者字段间计算或是转化而来的,这种类型是可以创建索引,利用 Generated 的特性,就可以间接的给 Json 类型中的 key 创建索引,解决 Json 不能创建索引的问题。简而言之, Generated 类型的产生,为 Json 类型在索引方面的问题提供了支持。JSON 的值包含单个值、数组、元组、标注的 Json 格式等几种格式。

02
领券