postgresql中的正则表达式

时间:2015-07-31 16:34:09

标签: regex json postgresql

我的表格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中的好字符串。

1 个答案:

答案 0 :(得分:1)

如果可能的话,在一个正则表达式中执行此操作会非常复杂,但是在两个或更多的情况下这样做很容易。

例如,将所有双引号替换为\",然后将{\"替换为{",将\":\"替换为":"\",\"","\"} "}。未转义的引号是破坏JSON的引号。

或者,将"(?=[^}:]*"[\s]*})(仅限标题中的引号)替换为\",然后将":\"替换为":"。查看详情:https://regex101.com/r/pB6rD9/1

能够一次性完成的制作替换需要外观,我想PSQL不支持它们。