如何将CURL返回的表格数据转为JSON数组?(PHP/CLI实现)
用sed预处理+工具链将curl返回的表格转JSON
第一步:sed预处理命令
先处理curl返回的原始数据,删掉开头的查询语句行,同时清理分隔符|前后的冗余空格,命令如下:
curl -d "sql query here" -X POST https://xxx/database_query | sed -e '1d' -e 's/ *| */|/g'
1d:直接删除第一行(就是带> select的查询语句行)s/ *| */|/g:把所有|前后的任意数量空格替换成单个|,让表头和数据列的分隔符更规整,方便后续处理。
第二步:配合awk+jq转成标准JSON
光sed只能做预处理,要生成JSON还得结合awk和jq(系统一般自带这两个工具),完整命令链如下:
curl -d "sql query here" -X POST https://xxx/database_query | sed -e '1d' -e 's/ *| */|/g' | awk -F'|' ' BEGIN { print "[" } NR == 1 { for (i=1; i<=NF; i++) headers[i] = $i; next } { printf "%s{", NR>2 ? "," : ""; for (i=1; i<=NF; i++) { printf "\"%s\": \"%s\"%s", headers[i], $i, i<NF ? "," : ""; } print "}" } END { print "]" } ' | jq .
- awk负责把处理后的表格转成JSON结构:先读取表头作为键,再逐行把数据转成键值对对象,最后包裹成数组
- jq负责格式化JSON输出,让结果更易读,同时验证JSON格式是否合法
可选:用csvkit简化转换(需额外安装)
如果你的系统能安装工具,用csvkit里的csvjson会更简单:
# 先安装csvkit:sudo apt install csvkit 或者 pip install csvkit curl -d "sql query here" -X POST https://xxx/database_query | sed -e '1d' -e 's/ *| */,/g' | csvjson
sed把|换成逗号后就是标准CSV格式,csvjson直接一键转JSON,省心省力。
进阶:把数字字段转成数值类型
如果需要把HEIGHT、COIN_BALANCE这类数字字段从字符串转成JSON数值,可以在jq里加类型转换:
... | jq 'map(. |= {ID: .ID, HEIGHT: (.HEIGHT | tonumber), COIN_BALANCE: (.COIN_BALANCE | tonumber)})'
内容的提问来源于stack exchange,提问作者Patoshi パトシ
相关产品推荐
相关产品推荐

