【问题标题】:How to convert JSON to array of strings如何将 JSON 转换为字符串数组
【发布时间】:2022-01-27 08:19:54
【问题描述】:

是否可以使用for json path 将行格式化为 JSON 数组格式?

我有这样的专栏

Col1
====
abc
def
ghi
jkl

我想这样格式化

{"Col1":["abc","def","ghi","jkl"]}

到目前为止,我已经让它看起来像这样

{["Col1":"abc","Col1":"def","Col1":"ghi","Col1":"jkl"]}

使用此代码

select col1 from table for json path 

【问题讨论】:

  • 提问时,您需要提供minimal reproducible example: (1) DDL 和样本数据填充,即 CREATE 表和 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上述#1 中的样本数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。

标签: sql arrays json sql-server tsql


【解决方案1】:

通过一些字符串操作。

创建一个简单的数组似乎错失了良机。

Select Col1 = json_query('["'+string_agg(string_escape(Col1,'json'), '","') +'"]')
 From  YourTable
  For  json path, Without_Array_Wrapper

结果

{"Col1":["abc","def","ghi","jkl"]}

如果您的版本是 string_agg() 将不可用。但是,您可以使用stuff()/xml 方法

Select Col1 = json_query('["'+stuff((Select concat('","',string_escape(Col1,'json'))  
                                      From  YourTable 
                                      For XML Path ('')),1,3,'')+'"]')
   For  json path, Without_Array_Wrapper

【讨论】:

  • 我不会撒谎,感觉应该有一个不那么笨重的方法,但我想不出一个。
  • SQL Server 2022 有望增强 JSON API 功能。
  • 悲伤的猜想我只需要通过它来闯关哈哈!
  • For XML Path (''), TYPE).value('text()[1]','nvarchar(max)') 是明智的,以避免 XML 转义
  • @Larnu SQL Server 的 JSON 功能严重缺失的两件事:JSON_AGGJSON_OBJECT_AGG 用于属性/值对
猜你喜欢
  • 2017-07-20
  • 2015-04-05
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多