JSON 函数的类型
simpleJSON*(visitParam*),用于以极高速度解析受限的 JSON 子集。JSONExtract*,用于解析常规 JSON。
simpleJSON (visitParam) 函数
- 字段名 (函数参数) 必须是常量。
- 字段名在 JSON 中必须采用某种规范编码形式。例如:
simpleJSONHas('{"abc":"def"}', 'abc') = 1,但simpleJSONHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0 - 会在任意嵌套层级中搜索字段,不区分层级。如果存在多个匹配字段,则使用第一次出现的字段。
- JSON 在字符串字面量之外不能包含空格字符。
JSONExtract 函数
不区分大小写的 JSONExtract 函数
这些函数的性能可能不如对应的区分大小写版本,因此如无必要,建议使用常规的 JSONExtract 函数。
JSONAllPaths
json— JSON 列。JSON
Array(String)
示例
用法示例
Query
Response
JSONAllPathsWithTypes
json— JSON 列。JSON
Map(String, String)
示例
使用示例
Query
Response
JSONAllValues
json— JSON 列。JSON
Array(String)
示例
用法示例
Query
Response
JSONArrayLength
NULL。
语法
JSON_ARRAY_LENGTH
参数
json— 有效 JSON 的 String。String
json 是有效的 JSON 数组 字符串,则返回数组元素个数;否则返回 NULL。Nullable(UInt64)
示例
使用示例
Query
Response
JSONDynamicPaths
json— JSON 列。JSON
Array(String)
示例
使用示例
Query
Response
JSONDynamicPathsWithTypes
json— JSON 列。JSON
Map(String, String)
示例
使用示例
Query
Response
JSONExtract
json— 要解析的 JSON 字符串。Stringindices_or_keys— 由零个或多个参数组成的列表,其中每个参数都可以是字符串或整数。String或(U)Int*return_type— 要返回的 ClickHouse 数据类型。String
Query
Response
JSONExtractArrayRaw
Array(String)
示例
用法示例
Query
Response
JSONExtractArrayRawCaseInsensitive
JSONExtractArrayRaw 类似。
语法
Array(String)
示例
基本
Query
Response
JSONExtractBool
0。Bool
示例
用法示例
Query
Response
JSONExtractBoolCaseInsensitive
JSONExtractBool 类似。
语法
true 为 1,false 为 0) ;如果未找到,则返回 0。UInt8
示例
基本用法
Query
Response
JSONExtractCaseInsensitive
JSONExtract。
语法
json— 要解析的 JSON 字符串Stringindices_or_keys— 可选。用于定位到该字段的索引或键。键采用不区分大小写的匹配方式String或(U)Int*return_type— 要提取的 ClickHouse 数据类型String
Any
示例
int_type
Query
Response
Query
Response
JSONExtractFloat
0。Float64
示例
使用示例
Query
Response
JSONExtractFloatCaseInsensitive
JSONExtractFloat 类似。
语法
Float64
示例
基本用法
Query
Response
JSONExtractInt
0。Int64
示例
用法示例
Query
Response
JSONExtractIntCaseInsensitive
JSONExtractInt 类似。
语法
Int64
示例
基本用法
Query
Response
Query
Response
JSONExtractKeys
Array(String)
示例
使用示例
Query
Response
JSONExtractKeysAndValues
json— 要解析的 JSON 字符串。Stringindices_or_keys— 由零个或多个参数组成的列表,其中每个参数都可以是字符串或整数。String或(U)Int*value_type— 值的 ClickHouse 数据类型。String
Array(Tuple(String, value_type))
示例
用法示例
Query
Response
JSONExtractKeysAndValuesCaseInsensitive
JSONExtractKeysAndValues 类似。
语法
json— 要解析的 JSON 字符串Stringindices_or_keys— 可选。用于定位到对象的索引或键。键按不区分大小写的方式匹配String或(U)Int*value_type— 值的 ClickHouse 数据类型String
Array(Tuple(String, T))
示例
基本用法
Query
Response
JSONExtractKeysAndValuesRaw
Array(Tuple(String, String))
示例
用法示例
Query
Response
JSONExtractKeysAndValuesRawCaseInsensitive
JSONExtractKeysAndValuesRaw 类似。
语法
Array(Tuple(String, String))
示例
基本用法
Query
Response
JSONExtractKeysCaseInsensitive
JSONExtractKeys。
语法
Array(String)
示例
基本用法
Query
Response
Query
Response
JSONExtractRaw
String
示例
使用示例
Query
Response
JSONExtractRawCaseInsensitive
JSONExtractRaw 类似。
语法
String
示例
object
Query
Response
JSONExtractString
String
示例
使用示例
Query
Response
JSONExtractStringCaseInsensitive
JSONExtractString 类似。
语法
String
示例
基本用法
Query
Response
Query
Response
JSONExtractUInt
0。UInt64
示例
用法示例
Query
Response
JSONExtractUIntCaseInsensitive
JSONExtractUInt 类似。
语法
UInt64
示例
基本用法
Query
Response
JSONHas
json 中,则返回 1;否则返回 0 UInt8
示例
用法示例
Query
Response
JSONKey
json— 要解析的 JSON 字符串。Stringindices_or_keys— 可选的索引或键列表,用于指定嵌套元素的路径。每个参数都可以是字符串 (通过键访问) 或整数 (通过从 1 开始的索引访问) 。String或Int*
String
示例
使用示例
Query
Response
JSONLength
0。
语法
json— 要解析的 JSON 字符串String[, indices_or_keys, ...]— 可选。由零个或多个参数组成的列表。String或(U)Int8/16/32/64
0。UInt64
示例
使用示例
Query
Response
JSONMergePatch
jsonMergePatch
参数
json1[, json2, ...]— 一个或多个有效的 JSON 字符串。String
String
示例
使用示例
Query
Response
json— JSON 列。JSON
Array(String)
示例
用法示例
Query
Response
json— JSON 列。JSON
Map(String, String)
示例
使用示例
Query
Response
JSONType
Null=0。
语法
json— 待解析的 JSON 字符串Stringjson[, indices_or_keys, ...]— 由零个或多个参数组成的列表,其中每个参数都可以是字符串或整数。String或(U)Int8/16/32/64
Null=0 枚举
示例
使用示例
Query
Response
JSON_EXISTS
1。
如果该值不存在,则返回 0。
语法
1;否则返回 0。UInt8
示例
使用示例
Query
Response
JSON_QUERY
String
示例
用法示例
Query
Response
JSON_VALUE
- 通过 SET
function_json_value_return_type_allow_nullable=true,将返回NULL。如果该值为复杂类型 (例如:struct、array、map) ,默认将返回空字符串。 - 通过 SET
function_json_value_return_type_allow_complex=true,将返回该复杂值。
String
示例
用法示例
Query
Response
dynamicElement
Dynamic 列中提取指定类型的数据列。
此函数可从 Dynamic 列中提取特定类型的值。如果某一行包含所请求类型的值,
则返回该值。如果该行包含其他类型的值或 NULL,则对于标量类型返回 NULL,
对于数组类型返回空数组。
语法
dynamic— 要从中提取值的 Dynamic 列。Dynamictype_name— 要提取的 Variant 类型名称 (例如 ‘String’、‘Int64’、‘Array(Int64)’) 。
Any
示例
从 Dynamic 列提取不同类型
Query
Response
dynamicType
Dynamic 列中每一行对应的 Variant 类型名称。
对于包含 NULL 的行,该函数返回 ‘None’。对于其他所有行,它返回存储在该行 Dynamic 列中的实际数据类型
(例如 ‘Int64’、‘String’、‘Array(Int64)’) 。
Syntax
dynamic— 要检查的 Dynamic 列。Dynamic
String
示例
检查 Dynamic 列中的类型
Query
Response
max_types 限制时,超出该限制的值会以共享二进制格式存储,
而不会拆分为各个独立的类型化子列。此函数可用于识别哪些行是以这种共享格式存储的。
语法
dynamic— 要检查的 Dynamic 列。Dynamic
Bool
示例
检查带有 max_types 限制的 Dynamic 列的存储格式
Query
Response
isValidJSON
json— 待验证的 JSON 字符串String
1;否则返回 0。UInt8
示例
用法示例
Query
Response
Query
Response
prettyPrintJSON
String
示例
简单对象
Query
Response
Query
Response
simpleJSONExtractBool
field_name 的字段值中解析出一个 true/false 值。
结果为 UInt8。
语法
visitParamExtractBool
参数
json— 要在其中查找字段的 JSON。Stringfield_name— 要查找的字段名称。const String
true,则返回 1;否则返回 0。这意味着在以下情况 (包括但不限于) 下,此函数也会返回 0:
- 如果字段不存在。
- 如果字段包含字符串形式的
true,例如:{"field":"true"}。 - 如果字段包含数值
1。UInt8
Query
Response
simpleJSONExtractFloat
field_name 的字段值中解析 Float64。
如果 field_name 是字符串字段,会尝试从字符串开头解析出数值。
如果该字段不存在,或虽存在但不包含数值,则返回 0。
语法
visitParamExtractFloat
参数
json— 要在其中查找字段的 JSON。Stringfield_name— 要查找的字段名称。const String
0。Float64
示例
用法示例
Query
Response
simpleJSONExtractInt
field_name 的字段值中解析 Int64。
如果 field_name 是字符串字段,则会尝试从字符串开头解析数字。
如果该字段不存在,或者虽存在但不包含数字,则返回 0。
语法
visitParamExtractInt
参数
json— 用于查找字段的 JSON。Stringfield_name— 要查找的字段名称。const String
0。Int64
示例
使用示例
Query
Response
simpleJSONExtractRaw
field_name 的字段值,类型为 String,并保留分隔符。
语法
visitParamExtractRaw
参数
json— 要在其中查找字段的 JSON。Stringfield_name— 要查找的字段名称。const String
String
示例
用法示例
Query
Response
simpleJSONExtractString
field_name 的字段的值中解析出双引号括起来的 String。
实现细节
目前不支持处理不属于基本多文种平面的 \uXXXX\uYYYY 格式码点 (它们会被转换为 CESU-8,而不是 UTF-8) 。
语法
visitParamExtractString
参数
json— 要在其中查找字段的 JSON。Stringfield_name— 要查找的字段名。const String
String
示例
使用示例
Query
Response
simpleJSONExtractUInt
field_name 的字段值中解析 UInt64。
如果 field_name 是 String 类型的字段,则会尝试从字符串开头解析数值。
如果该字段不存在,或虽存在但不包含数值,则返回 0。
语法
visitParamExtractUInt
参数
json— 要搜索字段的 JSON。Stringfield_name— 要搜索的字段名。const String
0。UInt64
示例
用法示例
Query
Response
simpleJSONHas
field_name 的字段。
语法
visitParamHas
参数
json— 要在其中查找字段的 JSON。Stringfield_name— 要查找的字段名称。const String
1;否则返回 0。 UInt8
示例
使用示例
Query
Response
toJSONString
UInt64 或 Int128) 会以引号括起来。output_format_json_quote_64bit_integers 控制此行为。
特殊值 NaN 和 inf 会被替换为 null。启用 output_format_json_quote_denormals 设置可显示它们。
序列化 枚举 值时,该函数会输出其名称。
另请参见:
语法
value— 要序列化的值。该值可以是任意数据类型。Any
String
示例
Map 的序列化
Query
Response
Query
Response