JSON 文本格式不正确。在位置 1 处发现意外字符“”
JSON text is not properly formatted. Unexpected character ''' is found at position 1
问题:为什么我无法应用OPENJSON函数将下面的数据读入标准的柱状格式?如何修改查询或 JSON 文本来解决此问题?
上下文: 我在 SQL 服务器的全局临时 table 中有一些 JSON 数据,我正在尝试解析和加载进入标准 table。
SELECT * FROM ##json_loop_tracking;
Returns单行数据结构如下:
{'sends': 0, 'opens': 0, 'clicks': 0, 'forwards': 0, 'unsubscribes': 0, 'bounces': 0, 'spam_count': 0}
尝试在下面的代码块中应用 OPENJSON 函数时出现以下错误:
Msg 13609, Level 16, State 4, Line 51
JSON text is not properly formatted. Unexpected character ''' is found at position 1.
INSERT INTO ##jsonparsed_tracking (
sends,opens,clicks,forwards,unsubscribes,bounces,spam_count
)
SELECT DISTINCT
jsn.sends, jsn.opens, jsn.clicks, jsn.forwards, jsn.unsubscribes, jsn.bounces,jsn.spam_count
FROM ##json_loop_tracking
OUTER APPLY (
SELECT * FROM OPENJSON(##json_loop_tracking.my_json)
WITH (
sends int '$.sends',
opens int '$.opens',
clicks int '$.clicks',
forwards int '$.forwards',
unsubscribes int '$.unsubscribes',
bounces int '$.bounces',
spam_count int '$.spam_count'
)
) AS jsn
像您的数据一样,单引号不正确 JSON。但是,如果您用双引号替换(如果您的所有数据都是这样),您仍然可以使用它:
>>> a = "{'sends': 0, 'opens': 0, 'clicks': 0, 'forwards': 0, 'unsubscribes': 0, 'bounces': 0, 'spam_count': 0}"
>>> import json
>>> json.loads(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python37\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Program Files\Python37\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Program Files\Python37\lib\json\decoder.py", line 353, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
这是一个不同的模块和不同的措辞,但基本上是相同的错误。我们这样修复它:
>>> json.loads(a.replace("'", '"'))
{'sends': 0, 'opens': 0, 'clicks': 0, 'forwards': 0, 'unsubscribes': 0, 'bounces': 0, 'spam_count': 0}
注意我使用 a.replace("'", '"')
解决了这个问题,如果您的数据包含更复杂的对象,这可能会失败
问题:为什么我无法应用OPENJSON函数将下面的数据读入标准的柱状格式?如何修改查询或 JSON 文本来解决此问题?
上下文: 我在 SQL 服务器的全局临时 table 中有一些 JSON 数据,我正在尝试解析和加载进入标准 table。
SELECT * FROM ##json_loop_tracking;
Returns单行数据结构如下:
{'sends': 0, 'opens': 0, 'clicks': 0, 'forwards': 0, 'unsubscribes': 0, 'bounces': 0, 'spam_count': 0}
尝试在下面的代码块中应用 OPENJSON 函数时出现以下错误:
Msg 13609, Level 16, State 4, Line 51 JSON text is not properly formatted. Unexpected character ''' is found at position 1.
INSERT INTO ##jsonparsed_tracking (
sends,opens,clicks,forwards,unsubscribes,bounces,spam_count
)
SELECT DISTINCT
jsn.sends, jsn.opens, jsn.clicks, jsn.forwards, jsn.unsubscribes, jsn.bounces,jsn.spam_count
FROM ##json_loop_tracking
OUTER APPLY (
SELECT * FROM OPENJSON(##json_loop_tracking.my_json)
WITH (
sends int '$.sends',
opens int '$.opens',
clicks int '$.clicks',
forwards int '$.forwards',
unsubscribes int '$.unsubscribes',
bounces int '$.bounces',
spam_count int '$.spam_count'
)
) AS jsn
像您的数据一样,单引号不正确 JSON。但是,如果您用双引号替换(如果您的所有数据都是这样),您仍然可以使用它:
>>> a = "{'sends': 0, 'opens': 0, 'clicks': 0, 'forwards': 0, 'unsubscribes': 0, 'bounces': 0, 'spam_count': 0}"
>>> import json
>>> json.loads(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python37\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Program Files\Python37\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Program Files\Python37\lib\json\decoder.py", line 353, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
这是一个不同的模块和不同的措辞,但基本上是相同的错误。我们这样修复它:
>>> json.loads(a.replace("'", '"'))
{'sends': 0, 'opens': 0, 'clicks': 0, 'forwards': 0, 'unsubscribes': 0, 'bounces': 0, 'spam_count': 0}
注意我使用 a.replace("'", '"')
解决了这个问题,如果您的数据包含更复杂的对象,这可能会失败