SQL Server 2016:将 JSON 对象数组转换为值数组
SQL Server 2016 的 JSON 功能很强大,但提取特定的数据结构有时需要创造性的方法。 此示例演示将 JSON 对象数组转换为更简单的值数组。
挑战:
考虑一个生成 JSON 对象数组的查询:
<code class="language-sql">SELECT (SELECT item_id FROM #temp FOR JSON PATH, root('ids')) </code>
这会产生如下 JSON:
<code class="language-json">{ "ids": [ {"item_id": "1234"}, {"item_id": "5678"}, {"item_id": "7890"} ] }</code>
目标是将其重组为仅包含 item_id
值的 JSON 数组:
<code class="language-json">{ "ids": [ "1234", "5678", "7890" ] }</code>
解决方案:
关键是利用 XML 作为中介的两步过程:
<code class="language-sql">SELECT JSON_QUERY('[' + STUFF(( SELECT ',' + '"' + item_id + '"' FROM #temp FOR XML PATH('')),1,1,'') + ']' ) ids FOR JSON PATH, WITHOUT_ARRAY_WRAPPER </code>
此代码首先使用 FOR XML PATH('')
连接 item_id
值,并用双引号将每个值括起来。 STUFF
删除前导逗号。 然后将结果括在方括号中以创建一个有效的 JSON 数组,JSON_QUERY
会对其进行解析。 最后,FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
将输出格式化为简单的 JSON 数组。 这有效地将原始 JSON 对象数组展平为所需的值数组。
以上是如何在 SQL Server 2016 中从 JSON 对象数组中提取值数组?的详细内容。更多信息请关注PHP中文网其他相关文章!