You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JSON_VALUE提取JSON数组ID数组报错问题求助

问题解决方法

错误原因

JSON_VALUE函数只能提取单个标量JSON值(比如字符串、数字、布尔值),而你用的$..ID是递归路径,会匹配JSON数组里所有对象的ID并返回一个数组([1,2]),这不符合JSON_VALUE的参数要求,因此触发"JSON path is not properly formatted"报错。

解决方案

根据你的需求,分两种场景处理:

1. 将JSON数组拆分为多行,每行对应一个对象的3列(ID、Change、Painted)

使用OPENJSON解析数组并指定列映射:

SELECT
    JSON_VALUE(item.value, '$.ID') AS ID,
    JSON_VALUE(item.value, '$.Change') AS [Change],
    JSON_VALUE(item.value, '$.Painted') AS Painted
FROM
    你的数据表
CROSS APPLY
    OPENJSON(你的JSON列名) AS item

这段SQL会把原JSON数组里的每个对象拆成一行,每行包含对应的ID、Change、Painted值。

2. 提取所有ID组成的数组(同时可保留拆分后的列)

如果需要单独提取所有ID组成的JSON数组,使用JSON_QUERY函数(它支持返回JSON对象或数组):

SELECT
    JSON_QUERY(你的JSON列名, '$..ID') AS ID数组,
    JSON_VALUE(item.value, '$.ID') AS ID,
    JSON_VALUE(item.value, '$.Change') AS [Change],
    JSON_VALUE(item.value, '$.Painted') AS Painted
FROM
    你的数据表
CROSS APPLY
    OPENJSON(你的JSON列名) AS item

若仅需提取ID数组,可简化为:

SELECT JSON_QUERY(你的JSON列名, '$..ID') AS ID数组 FROM 你的数据表

注意事项

  • 替换SQL中的你的数据表和你的JSON列名为实际的表名与列名
  • Change是SQL关键字,需用方括号[Change]包裹以避免语法错误

内容的提问来源于stack exchange,提问作者Hasan ÇAKMAK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:54:43