T-SQL FOR JSON如何输出带嵌套value属性的JSON结构
当前写法的问题
你使用的FOR JSON AUTO模式默认会按照查询返回的列值做1:1平铺映射,不会自动将基础类型的列值包装为带value属性的嵌套对象,这是该模式的预设行为,不存在语法错误,但无法满足自定义嵌套结构的需求。
官方推荐最佳实践
不需要做文本字符串拼接,直接使用FOR JSON PATH模式即可实现需求,这是SQL Server原生支持的JSON结构自定义方案,可读性、可维护性更强,也能自动处理特殊字符转义等字符串拼接容易遗漏的边界问题。
你只需要通过点号分隔的列别名,明确指定每个值的嵌套路径即可,参考代码如下:
SELECT Field1 AS [Field1.value], Field2 AS [Field2.value] FROM @header INNER JOIN @line ON @header.Id = @Line.Id FOR JSON PATH
上述写法会直接生成你期望的结构:每个字段对应一个对象,字段值存放在对象的value属性下。
补充说明:如果后续需要实现更复杂的多层JSON嵌套,
FOR JSON PATH的可控性也远高于FOR JSON AUTO,自定义JSON结构的场景优先选择PATH模式。
内容的提问来源于stack exchange,提问作者Anthony Horne
相关产品推荐
相关产品推荐

