如何使用curl获取Google Directions API的单行无格式JSON响应?
解决方案
最优方案:直接调用API返回单行JSON
Google Directions API 原生支持关闭格式化输出,只需在请求URL末尾追加&prettyPrint=false参数,接口就会直接返回无换行、无缩进的单行JSON,无需额外本地处理,完全避免符号转义问题。
对应的COPY命令如下:
COPY "routing_import_gm" ("request") FROM PROGRAM 'curl -s "https://maps.googleapis.com/maps/api/directions/json?origin=48.xxxxxx,+11.yyyyyy&destination=48.xxxxxx,+11.yyyyyyy&key=***&prettyPrint=false"';
说明:curl追加-s参数开启静默模式,避免输出进度信息污染JSON内容。
通用方案:使用jq压缩JSON(适配无原生压缩参数的接口)
如果调用的其他接口没有提供关闭格式化的参数,可以使用专门的JSON处理工具jq的-c参数将任意JSON压缩为单行,不会破坏JSON结构,比文本替换工具更安全。
首先需要在PostgreSQL服务所在的服务器安装jq:
- Debian/Ubuntu 系:
apt update && apt install -y jq - RHEL/CentOS 系:
yum install -y jq
对应的COPY命令如下:
COPY "routing_import_gm" ("request") FROM PROGRAM 'curl -s "https://maps.googleapis.com/maps/api/directions/json?origin=48.xxxxxx,+11.yyyyyy&destination=48.xxxxxx,+11.yyyyyyy&key=***" | jq -c .';
原有tr方案的修正(不推荐)
你之前用tr报错的核心原因是没有加curl的-s静默参数,curl的进度输出混入了JSON内容,同时tr只能删除换行,无法清理缩进的空格/制表符,仅适合临时应急使用,修正后的写法如下:
COPY "routing_import_gm" ("request") FROM PROGRAM 'curl -s "https://maps.googleapis.com/maps/api/directions/json?origin=48.xxxxxx,+11.yyyyyy&destination=48.xxxxxx,+11.yyyyyyy&key=***" | tr -d ''\n\r'' ';
内容的提问来源于stack exchange,提问作者Tibor
相关产品推荐
相关产品推荐

