如何将JSON字符串格式化为";键=值“;使用jq格式?

如何将JSON字符串格式化为";键=值“;使用jq格式?,json,jq,Json,Jq,我想将JSON字符串转换成以逗号分隔的“key=value”格式 {"foo": "bar", "number": 123} 应转换为 foo=bar, number=123 我一直在寻找jq文档并寻找一个简单的解决方案,但是我很难动态地实现这一点,因为我不知道前面字段的名称 这是我能做到的最远的地方,但我不确定如何修复转义问题,代码非常难看 04:52:32 root@raspberrypi ~ → echo $json {&qu

我想将JSON字符串转换成以逗号分隔的“key=value”格式

{"foo": "bar", "number": 123}
应转换为

foo=bar, number=123
我一直在寻找jq文档并寻找一个简单的解决方案,但是我很难动态地实现这一点,因为我不知道前面字段的名称

这是我能做到的最远的地方,但我不确定如何修复转义问题,代码非常难看

04:52:32 root@raspberrypi ~ → echo $json
{"time_utc":1606488980,"Temperature":-0.3,"Humidity":100,"min_temp":-1.4,"max_temp":-0.2,"date_max_temp":1606476880,"date_min_temp":1606428232,"temp_trend":"stable"}
04:52:34 root@raspberrypi ~ → keys=$(echo $json | jq keys | jq -r .[] | awk '{printf $1"=\(."$1") "}')
04:52:41 root@raspberrypi ~ → echo $keys
Humidity=\(.Humidity) Temperature=\(.Temperature) date_max_temp=\(.date_max_temp) date_min_temp=\(.date_min_temp) max_temp=\(.max_temp) min_temp=\(.min_temp) temp_trend=\(.temp_trend) time_utc=\(.time_utc)
04:52:45 root@raspberrypi ~ → echo $json | jq -r "$keys"
jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell quoting issues?) at <top-level>, line 1:
Humidity=\(.Humidity) Temperature=\(.Temperature) date_max_temp=\(.date_max_temp) date_min_temp=\(.date_min_temp) max_temp=\(.max_temp) min_temp=\(.min_temp) temp_trend=\(.temp_trend) time_utc=\(.time_utc)          
jq: 1 compile error
04:53:17 root@raspberrypi ~ → echo $json | jq -r '"Humidity=\(.Humidity) Temperature=\(.Temperature) date_max_temp=\(.date_max_temp) date_min_temp=\(.date_min_temp) max_temp=\(.max_temp) min_temp=\(.min_temp) temp_trend=\(.temp_trend) time_utc=\(.time_utc)"'
Humidity=100 Temperature=-0.3 date_max_temp=1606476880 date_min_temp=1606428232 max_temp=-0.2 min_temp=-1.4 temp_trend=stable time_utc=1606488980
04:52:32root@raspberrypi ~ → echo$json
{“时间utc”:1606488980,“温度”:-0.3,“湿度”:100,“最低温度”:-1.4,“最高温度”:-0.2,“日期最高温度”:1606476880,“日期最低温度”:1606428232,“温度趋势”:“稳定”}
04:52:34 root@raspberrypi ~ → keys=$(echo$json | jq keys | jq-r.[]| awk'{printf$1'=\(.“$1”)“}')
04:52:41 root@raspberrypi ~ → echo$键
湿度=\(.湿度)温度=\(.温度)日期最大温度=\(.日期最大温度)日期最小温度=\(.日期最小温度)最大温度=\(.最大温度)最小温度=\(.最小温度)温度趋势=\(.温度趋势)时间utc=\(.时间utc)
04:52:45 root@raspberrypi ~ → echo$json | jq-r“$keys”
jq:error:syntax error,第1行出现意外的无效字符(Unix shell引用问题?)
湿度=\(.湿度)温度=\(.温度)日期最大温度=\(.日期最大温度)日期最小温度=\(.日期最小温度)最大温度=\(.最大温度)最小温度=\(.最小温度)温度趋势=\(.温度趋势)时间utc=\(.时间utc)
jq:1编译错误
04:53:17 root@raspberrypi ~ → echo$json“jq-r'”湿度=\(.湿度)温度=\(.温度)日期\最高温度=\(.日期\最高温度)日期\最低温度=\(.日期\最低温度)最高温度=\(.最高温度)最低温度=\(.最低温度)温度趋势=\(.温度趋势)时间\ utc=\(.时间\ utc)”
湿度=100温度=-0.3日期最大温度=1606476880日期最小温度=1606428232最大温度=-0.2最小温度=-1.4温度趋势=稳定时间utc=1606488980
  • to_条目
    生成键/值对列表,例如,
    [“foo”,“bar”],…]
  • “=”
    连接每一对,例如
    [“foo=bar”,…]
  • 用“
    ”和“
    再次连接每一对,例如,
    “foo=bar,…

  • echo$json | jq-r'to|u entries | map(join(“”)| join(“”)| join(“”)
    jq:error(at:1):字符串(“”)和数字(1606488980)无法添加这看起来是一个非常干净的解决方案,但我得到了上面的错误。它似乎试图将“=”设置为键?
    jq'map| u值(tostring)| to|u entries(join(“”)| join(“”)| join(“”)|“
    似乎有效!在JQ1.5及更高版本中,join/1会根据需要进行标量到字符串的转换。
    to_entries | map(join("=")) | join(", ")