当我这样做时:
SELECT cast('{"viewport" : { "northeast" : { "lat" : 40.7155809802915, "lng" : -73.9599399197085 }, "southwest" : { "lat" : 40.7128830197085, "lng" : -73.96263788029151 } }}' AS json);
我明白了:
"{"viewport" : { "northeast" : { "lat" : 40.7155809802915, "lng" : -73.9599399197085 }, "southwest" : { "lat" : 40.7128830197085, "lng" : -73.96263788029151 } }}"
我想将它转换为没有空格或更少空格的东西。像这样:
"{"viewport" : {"northeast" : {"lat" : 40.7155809802915, "lng" : -73.9599399197085 }, "southwest" : { "lat" : 40.7128830197085, "lng" : -73.96263788029151 }}}"
答案 0 :(得分:2)
SELECT cast(replace('{"viewport" : { "northeast" : { "lat" : 40.7155809802915, "lng" : -73.9599399197085 }, "southwest" : { "lat" : 40.7128830197085, "lng" : -73.96263788029151 } }}', ' ', '') AS json);
产量
{"viewport":{"northeast":{"lat":40.7155809802915,"lng":-73.9599399197085},"southwest":{"lat":40.7128830197085,"lng":-73.96263788029151}}}
然而,我本以为演员会完成这个!此外,如果任何键名称中有空格,则会失败。
更新了关键或值中潜在空格问题的答案:
SELECT cast(regexp_replace('{"viewport here" : { "northeast there" : { "lat" : 40.7155809802915, "lng" : -73.9599399197085 }, "southwest" : { "iggy and": "squiggy or something", "lat" : 40.7128830197085, "lng" : -73.96263788029151 } }}', '( )(?=(?:[^"]|"[^"]*")*$)', '', 'g') AS json);
返回
{"viewport here":{"northeast there":{"lat":40.7155809802915,"lng":-73.9599399197085},"southwest":{"iggy and":"squiggy or something","lat":40.7128830197085,"lng":-73.96263788029151}
}}
这是postgres文档: http://www.postgresql.org/docs/9.3/static/functions-matching.html
这是我在这个特定的正则表达式上找到的堆栈溢出: Regex to pick commas outside of quotes
@lpsmith:确实,在9.4中这有效:
SELECT cast('{"viewport here" : { "northeast there" : { "lat" : 40.7155809802915, "lng" : -73.9599399197085 }, "southwest" : { "iggy and": "squiggy or something", "lat" : 40.7128830197085, "lng" : -73.96263788029151 } }}' AS jsonb);
产生这个:
{"viewport here": {"southwest": {"lat": 40.7128830197085, "lng": -73.96263788029151, "iggy and": "squiggy or something"}, "northeast there": {"lat": 40.7155809802915, "lng": -73.95
99399197085}}}
-g
答案 1 :(得分:2)
我目前还没有特别注意postgresql中的任何json打印机。您可以实现适当的服务器端功能,这不应该太困难。但在您将应用程序插入数据库之前解析并在应用程序中打印json可能是最好的。
重要的是要记住json
类型只是一个字符串,在概念上有一个检查约束,确保它实际上是有效的json语法。这就是全部。因此,postgresql本身内部的json操作可能效率很低。
随着jsonb
类型进入postgresql 9.4将解决你的问题,因为它不存储json本身,而是一个更适合有效操作的抽象表示。因此,存储jsonb
值将忘记任何无关的空格,并且您可能会返回从打印机生成的最小json字符串。