我正在尝试使用一个JSON API并将其放入SQL Server(版本15.x)中的一个表中。我可以手动运行它,它很好地与我的进程沿着运行并很好地放置在一起。
我需要将其自动化以使用API来满足存档需要,但当我将其放入SQL Server代理作业步骤并尝试运行它时,该操作失败,并显示以下消息:
JSON文本的格式不正确。在位置16处发现意外字符“"。[SQLSTATE 42000](错误13609)。该步骤失败。
所以,当在线查看时,该错误消息表明JSON本身存在格式错误,我无法控制。我对JSON不是很了解,因此不知道如何修复错误。
我的SQL有问题吗?将它作为作业中的一个步骤调用,而不是存储为过程然后调用该过程,这样合适吗?这有关系吗?下面的语句是针对公共API运行的,所以请测试它,并让我知道我做错了什么!谢谢
Declare @Object as Int;
DECLARE @hr int
Declare @json as table(Json_Table nvarchar(max))
Exec @hr=sp_OACreate 'MSXML2.ServerXMLHTTP.6.0', @Object OUT;
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
Exec @hr=sp_OAMethod @Object, 'open', NULL, 'get',
'https://seeclickfix.com/open311/v2/407/requests.json',
'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
Exec @hr=sp_OAMethod @Object, 'send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
Exec @hr=sp_OAMethod @Object, 'responseText', @json OUTPUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
INSERT into @json (Json_Table) exec sp_OAGetProperty @Object, 'responseText'
-- select the JSON string
select * from @json
-- Parse the JSON string
insert into [DATA].[DATA].[SeeClickFix_APIFeed_refresh](
[description]
,[address]
,[lat]
,[service_request_id]
,[requested_datetime]
,[long]
,[service code]
,[status]
,[zipcode]
,[agency_responsible]
,[service_name]
,[media_url]
,[expected_datetime]
,[address_id]
,[service_notice]
,[status_notes]
)
SELECT * FROM OPENJSON((select * from @json))
WITH (
[description] nvarchar(max) "$.description" ,
[address] nvarchar(max) "$.address",
[lat] nvarchar(max) "$.lat",
[service_request_id] nvarchar(max) "$.service_request_id",
[requested_datetime] [nvarchar](max) "$.requested_datetime",
[long] nvarchar(max) "$.long",
[service code] nvarchar(max) "$.service_code",
[status] nvarchar(max) "$.status",
[zipcode] nvarchar(max) "$.zipcode",
[agency_responsible] nvarchar(max) "$.agency_responsible",
[service_name] nvarchar(max) "$.service_name",
[media_url] [nvarchar](max) "$.media_url",
[expected_datetime] [nvarchar](max) "$.expected_datetime",
[address_id] nvarchar(max) "$.address_id",
[service_notice] nvarchar(max) "$.service_notice",
[status_notes] nvarchar(max) "$.status_notes"
)
EXEC sp_OADestroy @Object
我对JSON了解不多,所以不确定我可以修改什么来尝试修复它
1条答案
按热度按时间jvlzgdj91#
得到了一个修复,在它的当前状态。一些评论家指出,这是一个MS问题,而不是一个JSON错误。
将“SET TEXTSIZE -1”添加到头中允许它在SQL Server代理中运行。这可能与SSMS之外的服务器本身上的默认文本大小有关。仍然不完全了解它是什么,并且@alwaysLearning我需要了解更多关于您的评论的信息。