Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用公共_模式提取值不适用于嵌套JSON_Mysql_Json_Common Schema - Fatal编程技术网

Mysql 使用公共_模式提取值不适用于嵌套JSON

Mysql 使用公共_模式提取值不适用于嵌套JSON,mysql,json,common-schema,Mysql,Json,Common Schema,我有一个名为data的DB字段,类型为MEDIUMTEXT,它以JSON格式存储值。我正在使用extract\u json\u value方法从common\u模式 当JSON没有嵌套时,它可以正常工作。例如,当applications\u data表的data字段 { "key": "value" } 此查询工作正常: SELECT data into @json from applications_data; SELECT common_schema.extract_json_valu

我有一个名为
data
的DB字段,类型为MEDIUMTEXT,它以JSON格式存储值。我正在使用
extract\u json\u value
方法从
common\u模式

当JSON没有嵌套时,它可以正常工作。例如,当
applications\u data
表的
data
字段

{
  "key": "value"
}
此查询工作正常:

SELECT data into @json from applications_data;
SELECT common_schema.extract_json_value(@json, 'key') as result;
并给出结果:
key

但是,如果数据字段是嵌套的JSON,则会失败。例如,JSON是:

{
  "key": {
    "overview": "sample"
  }
}
使用与上述相同的查询,结果为空,不为空:

记住:

此函数在内部依赖于:它首先 将JSON数据转换为XML,然后使用 XPath

如果找不到表达式的匹配文本节点(包括 隐式/text())-无论出于何种原因,只要xpath\u expr有效,并且xml\u frag包含正确嵌套和关闭的元素,就会返回空字符串。空元素上的匹配与完全不匹配之间没有区别。这是故意的

如果需要确定在中是否找不到匹配的元素 xml\u frag或找到了此类元素,但未包含子文本 节点,您应该测试使用XPath的表达式的结果 count()函数

测试:

mysql>SET@`json`:='
'> {
“>”键:{
'>“概述”:“示例”
'>   }
'> }
'> ';
查询正常,0行受影响(0.00秒)
mysql>选择
->公共模式。提取json值(@`json`,'key')作为结果0,
->公共模式。提取json值(@`json`,count('key'))作为结果1,
->公共模式。提取json值(@`json`,'key/overview')作为结果2,
->公共模式。提取json值(@`json`,count('key/overview')作为结果3;
+---------+---------+---------+---------+
|结果0 |结果1 |结果2 |结果3|
+---------+---------+---------+---------+
|| 1 |样本| 1|
+---------+---------+---------+---------+
一组1行(0.03秒)

能否添加一个嵌套JSON的示例、您尝试执行的查询以及预期结果?@wchiquito编辑了该问题。如果你需要更多信息,请告诉我。非常感谢。