我正在处理一个具有 JSON 格式列的表,我想从该列中提取坐标值。
所以我运行以下代码:
Select *,JSON_VALUE(field,'$."Coordinate-X"[0]') As coordinate INTO TABLE_1 FROM table
WHERE JSON_VALUE(field,'$."Coordinate-X"[0]') IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
运行5分钟后出现以下错误
消息 13609,级别 16,状态 1,第 27 行 Json 文本格式不正确。在位置 151 处发现意外字符“”。
当我尝试检查一些前 200 * 以下的行时,代码返回结果,没有任何错误
Select TOP 200 *,JSON_QUERY(field,'$."Coordinate-X"[0]') As coordinate FROM table
WHERE JSON_VALUE(field,'$."Coordinate-X"[0]') IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
我想我有一行导致了错误,但我不知道如何识别它或排除该行并返回结果。
我找到了一个可以让 Vim 解析 JSON 的插件。我需要将 VimScript 字典导出为 JSON。目前我只是使用:
let str = string(dict)
substitute(str, "'", '"', 'g')
Run Code Online (Sandbox Code Playgroud)
这是可行的,但当我遇到带有嵌入引号的字典时,它肯定会中断。有什么更好的办法呢?
JSON 存储在表中的“DataJson”列中
[{
"KickOffDate": "1-Jan-2019",
"TeamSize": "11",
"ClientEngineer": "Sagar",
"WaitingPeriod": "16.5"
}]
Run Code Online (Sandbox Code Playgroud)
询问
SELECT JSON_VALUE(DataJson,'$.KickOffDate') AS KickOffDate
, JSON_VALUE(DataJson,'$.ClientEngineer') AS ClientEngineer
FROM [ABC].[Deliver]
Run Code Online (Sandbox Code Playgroud)
结果
KickOffDate ClientEngineer
NULL NULL
Run Code Online (Sandbox Code Playgroud)
结果应该是:
KickOffDate ClientEngineer
1-Jan-2019 Sagar
Run Code Online (Sandbox Code Playgroud) 我在其中一列中有一个包含 JSON 数据的表,我正在尝试解析 JSON 数据并插入到临时表中
DECLARE @TEMPTABLE
(
ID INT,
Status NVARCHAR(50),
Cost DECIMAL(20, 0)
)
INSERT INTO @TEMPTABLE
SELECT
ID,
JSON_VALUE(mydata, '$.Status') AS Status,
JSON_VALUE(mydata, '$.Cost') AS Cost
FROM Expense
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
将数据类型 nvarchar 转换为数字时出错
如果我注释掉该Cost列,同样可以正常工作。
成本表中的示例 JSON 数据
| ID | mydata
+----+-------------------------------------
| 1 | {"Status":"Shipped","Cost":"$10.50"}
Run Code Online (Sandbox Code Playgroud) 我将此 JSON 传递给 SQL Server 中的存储过程
{
"individual": [
{
"app_id": 1057029,
"size": 2
},
{
"app_id": 1057053,
"size": 3
},
{
"app_id": 1057048,
"size": 1
}
]
}
Run Code Online (Sandbox Code Playgroud)
在存储过程中,我提取app_id和的值size,如下所示
SET @len = JSON_VALUE(@json, CONCAT('$.individual[', @i, '].size'));
SET @appId = JSON_VALUE(@json, CONCAT('$.individual[', @i, '].app_id'));
Run Code Online (Sandbox Code Playgroud)
(这里i是索引变量在循环中递增)
这在 Microsoft SQL Server 2017(版本 14.0.1000.169)上完美运行
但在 Microsoft SQL Server 2016(版本 13.0.4604.0)上,我收到错误:
JSON_Value 错误:“JSON_VALUE 或 JSON_QUERY”的参数 2 必须是字符串文字
请注意,这不是重复的,因为我已经在下面提到了问题,但仍然没有得到解决方案。