看起来我的psql DB包含一些格式错误的json字段,因此我无法使用 - >>检索此数据。运算符。
我有一个表格,列有#34;声誉"类型为json。
我执行查询以获得"声誉"特定对象的列:
select reputation from hashes where sha1='c1b5684e132a85d18a35ddb98233cc2b71efcf0e'
我收到以下结果,看起来像使用转义字符格式化的json:
"{\"status\": \"MALICIOUS\", \"scanner_match\": 33, \"first_seen\": \"2010-05-27T09:00:27\", \"scanner_count\": 34, \"last_seen\": \"2010-05-27T09:00:27\"}"
但是,当我试图在这个json中获得特定字段时,我什么也得不到:
select reputation->>status from hashes where sha1='c1b5684e132a85d18a35ddb98233cc2b71efcf0e'
我还尝试了以下查询来检查psql如何处理这个json并收到错误:
select * from json_each((select reputation from hashes where sha1='c1b5684e132a85d18a35ddb98233cc2b71efcf0e'));
ERROR: cannot deconstruct a scalar
所以看起来psql不会将其识别为json。如果是这样,我有几个问题:
答案 0 :(得分:1)
它的反斜杠。 Psql将它们视为转义字符并插入到json数据类型中没有问题。
在sql中查看字符串被视为字符串而不是json,您需要执行一些字符串函数来删除错误的字符。
with cte as(
select cast ('"{\"status\": \"MALICIOUS\", \"scanner_match\": 33, \"first_seen\": \"2010-05-27T09:00:27\", \"scanner_count\": 34, \"last_seen\": \"2010-05-27T09:00:27\"}"'as json) as string)
select cast(ltrim(rtrim(replace(cast(string as text),'\',''),'"'),'"')as json)
from cte
返回json数据类型