我的表格mytable
包含images
列,我存储了JSON
个对象的字符串。
此列在某些记录中包含无效字符串,不是因为字符串不正确,而是因为当我尝试将其强制转换为JSON时查询失败。例如:
`SELECT images::JSON->0 FROM mytable WHERE <any filter>`
如果JSON对象的所有元素都很好,那么查询可以成功运行,但是如果某个字符串的"
位置不正确(具体而言,在title
键中),则会发生错误
好的字符串是这样的:
[
{
"imagen": "http://www.myExample.com/asd1.png",
"amazon": "http://amazonExample.com/asd1.jpg",
"title": "A title 1."
},
{
"imagen": "http://www.myExample.com/asd2.png",
"amazon": "http://amazonExample.com/asd2.jpg",
"title": "A title 2."
},
{
"imagen": "http://www.myExample.com/asd3.png",
"amazon": "http://amazonExample.com/asd3.jpg",
"title": "A title 3."
}
]
坏是这样的:
[
{
"imagen": "http://www.myExample.com/asd1.png",
"amazon": "http://amazonExample.com/asd1.jpg",
"title": "A "title" 1."
},
{
"imagen": "http://www.myExample.com/asd2.png",
"amazon": "http://amazonExample.com/asd2.jpg",
"title": "A title 2."
},
{
"imagen": "http://www.myExample.com/asd3.png",
"amazon": "http://amazonExample.com/asd3.jpg",
"title": "A title 3."
}
]
请注意标题键的区别。
我需要一个正则表达式将坏字符串转换为PostgreSQL中的好字符串。
答案 0 :(得分:1)
如果可能的话,在一个正则表达式中执行此操作会非常复杂,但是在两个或更多的情况下这样做很容易。
例如,将所有双引号替换为\"
,然后将{\"
替换为{"
,将\":\"
替换为":"
,\",\"
, ","
,\"}
"}
。未转义的引号是破坏JSON的引号。
或者,将"(?=[^}:]*"[\s]*})
(仅限标题中的引号)替换为\"
,然后将":\"
替换为":"
。查看详情:https://regex101.com/r/pB6rD9/1
能够一次性完成的制作替换需要外观,我想PSQL不支持它们。