SQL Server 无法使用OPENJSON解析synapse SQL中的JSON

jtjikinw  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(315)

这个问题参考了我之前的SO主题。
简而言之,我尝试在Synapse SQL中解析JSON输入。

DECLARE @json nvarchar(max)
SET @json= '{"value": "{\"value\":[{\"ERDAT\":\"20210511\"},{\"ERDAT\":\"20210511\"}, 
            {\"ERDAT\":\"20210511\"},{\"ERDAT\":\"20210511\"},"type": "String"}';

DECLARE @ReplacedDetails nvarchar(max), @ReplacedStringDetails nvarchar(max)
SET @ReplacedDetails = REPLACE(LTRIM(RTRIM(@json)),'\','');
SET @ReplacedStringDetails = REPLACE(@ReplacedDetails,',"type": "String"','');

SELECT @ReplacedStringDetails
    CREATE TABLE #ValueTable_15
        (
        ColumnName varchar(200),
        LastUpdatedValue varchar(200)
        );
INSERT INTO  #ValueTable_15 (ColumnName,LastUpdatedValue)
SELECT TOP(1) j2.[key],TRY_PARSE(j2.[value] as bigint) AS LastUpdatedValue
FROM OPENJSON(@ReplacedStringDetails, '$.value.value') j1
CROSS APPLY OPENJSON(j1.value) j2
ORDER BY LastUpdatedValue DESC;

然后,当我运行上面的查询时,出现错误:

Microsoft][ODBC Driver 17 for SQL Server][SQL Server]JSON text is not properly formatted. Unexpected character 'v' is found at position 13

当我只是简单地尝试SELECT @ReplaceStringDetails时,它就给出了预期的结果。
我错过了什么?
P.S. I用简单的$.value替换了$.value.value,但没有产生任何结果。

nlejzf6q

nlejzf6q1#

正如注解中所指出的,在,"type": "String"}之前的字符]}"似乎被删除了。如果您更正了该编辑,您应该能够使用普通的OPENJSON()表值函数解析JSON,例如:

DECLARE @json nvarchar(max)
SET @json= '{"value": "{\"value\":[{\"ERDAT\":\"20210511\"},{\"ERDAT\":\"20210511\"},{\"ERDAT\":\"20210511\"},{\"ERDAT\":\"20210511\"}]}","type": "String"}';

SELECT [embedded].*
FROM OPENJSON(@json) WITH (
  [value] nvarchar(max) --nope: AS JSON
) [wrapper]
CROSS APPLY OPENJSON(wrapper.value, '$.value') WITH (
  [ERDAT] nvarchar(10)
) [embedded];

返回结果...
| 实体数据库|
| - -|
| 二○二一○五一一|
| 二○二一○五一一|
| 二○二一○五一一|
| 二○二一○五一一|

相关问题