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

如何让SQL Server查询返回纯值列表而非带键对象的JSON结果?

SQL Server生成纯数值数组的JSON输出

问题描述

现有如下SQL Server查询语句,希望生成的JSON中chartData字段是纯数值列表,而非包含mSales键的对象数组。但使用WITHOUT_ARRAY_WRAPPER关键字时,数值会被转为字符串,无法得到预期格式。

原查询语句

DECLARE @chartData TABLE
(
    mSales MONEY
)
INSERT INTO @chartData (mSales)
SELECT 498.65 AS mSales
UNION ALL
SELECT 439.83
UNION ALL
SELECT 492.23
UNION ALL
SELECT 439.40;

SELECT 
    'IPM Sales' AS chartTitle,
    (SELECT * FROM @chartData FOR JSON PATH) AS chartData
FOR JSON PATH

当前输出

[
    {
        "chartTitle": "IPM Sales",
        "chartData": [
            {"mSales": 498.6500},
            {"mSales": 439.8300},
            {"mSales": 492.2300},
            {"mSales": 439.4000}
        ]
    }
]

预期输出

[
    {
        "chartTitle": "IPM Sales",
        "chartData": [
            498.6500,
            439.8300,
            492.2300,
            439.4000
        ]
    }
]

解决方案

可以通过STRING_AGG拼接数值为JSON数组格式的字符串,再用JSON_QUERY将其解析为JSON类型,避免被转为字符串。修改后的查询语句如下:

DECLARE @chartData TABLE
(
    mSales MONEY
)
INSERT INTO @chartData (mSales)
SELECT 498.65 AS mSales
UNION ALL
SELECT 439.83
UNION ALL
SELECT 492.23
UNION ALL
SELECT 439.40;

SELECT 
    'IPM Sales' AS chartTitle,
    JSON_QUERY('[' + STRING_AGG(mSales, ',') + ']') AS chartData
FROM @chartData
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;

原理说明

  • STRING_AGG(mSales, ','):将所有mSales数值用逗号连接成字符串,得到"498.65,439.83,492.23,439.40"
  • 拼接[]后形成合法的JSON数组字符串:"[498.65,439.83,492.23,439.40]"
  • JSON_QUERY:告诉SQL Server该字符串是合法的JSON内容,不会在外层JSON中对其添加引号或转义,最终输出为纯数值数组。

执行结果

运行修改后的语句,将得到与预期一致的JSON输出。

内容的提问来源于stack exchange,提问作者Shahab Haidar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:52:42