我正在尝试将一些数据转储为 json:
\copy (SELECT json_build_object('areaSqft',area_sqft, 'titleNos',title_nos, 'buildingIds',building_ids, 'geometry',geom_json) FROM my_data) to my_data.csv with delimiter ',' csv header
我期望的是每行有效的 json,但我得到的是:
"{""areaSqft"": 214.394254595041, ""geometry"": {""type"": ""MultiPolygon"", ""coordinates"": [[[[0.000015, 51.449107], [0.000154, 51.441108], [0.000238, 51.44111], [0.00024, 51.441052], [0.000137, 51.441051], [0.000041, 51.441049], [0.000015, 51.441107]]]]}, ""titleNos"": [""ZB78669""], ""buildingIds"": [7521141, 9530393, 7530394]}"
有额外"
的第一个和最后一个字符以及""
周围而不是 single "
。
如何获得有效的 json 去除不必要的引号?
字段和内部字段的引号是 CSV 格式的一部分,在这里它们是必需的,因为根据CSV 规范:
我认为您不需要或不需要 CSV。只取SELECT的输出,
unaligned
格式为psql您也可以使用
\g output.json
而不是查询末尾的分号让 psql 将该查询的结果重定向到文件,并\pset tuples_only
删除页眉和页脚。您可以在查询中添加更多参数:
也可以看看:
将其放在这里以供将来参考,因为我必须处理 CSV(已经)导出文件上包含 JSON 的特定列。
您可以通过在您的复制选项中使用以下内容来摆脱它
FORMAT CSV
:QUOTE ''''
(使用单引号字符而不是默认的双引号字符)以及
DELIMITER '|'
(或除逗号以外的任何其他逗号,以防止必须转义 JSON 中的所有逗号,这很容易出错,并且在您尝试使用文件进行加载(复制自)时降低下游兼容性)对我来说,问题实际上是我以前使用
cursor.copy_to()
Python 的 psycopg2 库,需要将其替换cursor.copy_expert()
为更好/更多的控制(引用/取消引用传递的列名)。显然 .copy_to 方法使用该QUOTE ''''
选项而没有在我能找到的任何地方记录...