json - 在 Bash 中对 JSON 记录进行分组和排序
问题描述
我正在使用 curl 获取 JSON 文件。我的问题是我想在一行中获得 4 个单词的组,然后换行,并按第一列排序。
我正在努力:
curl -L 'http://mylink/ | jq '.[]| .location, .host_name, .serial_number, .model'
我越来越
"Office-1"
"work-1"
"11xxx111"
"hp"
"Office-2"
"work-2"
"33xxx333"
"lenovo"
"Office-1"
"work-3"
"22xxx222"
"dell"
我想拥有:
"Office-1", "work-1", "11xxx111", "hp"
"Office-1" "work-3", "22xxx222", "dell"
"Office-2", "work-2", "33xxx333", "lenovo"
我试过 jq -S ".[]| .location| group_by(.location)
了,其他的组合也很少,sort_by(.location)
但它不起作用。我收到错误:jq: error (at <stdin>:1): Cannot iterate over string ("Office-1")
我的 JSON 文件示例:
[
{
"location": "Office-1",
"host_name": "work-1",
"serial_number": "11xxx111",
"model": "hp"
},
{
"location": "Office-2",
"host_name": "work-2",
"serial_number": "33xxx333",
"model": "lenovo"
},
{
"location": "Office-1",
"host_name": "work-3",
"serial_number": "22xxx222",
"model": "dell"
}
]
解决方案
仅排序.location
,没有外部排序:
map( [ .location, .host_name, .serial_number, .model] )
| sort_by(.[0])[]
| map("\"\(.)\"") | join(", ")
这", "
是按照规定的要求。
如果您希望输出为 CSV,只需将上面 jq 程序中的最后一行替换为@csv
.
如果最小化击键是一个目标,那么如果您确定键始终处于所需的顺序,您可以将第一行替换为map( [ .[] ] )
推荐阅读
- unity3d - 如何在我的项目中使用 2d-extras zip 文件?(或任何其他外部统一下载)
- python - 如何更改假设生成的最大测试用例数?
- javascript - 根据显示的单词更改文本的颜色
- javascript - 悬停时我怎么能做很多元素做同样的事情?
- python - 正则表达式修复格式错误的 JSON
- jquery - 获取未捕获的 ReferenceError:Rails 6 项目中未定义 jQuery
- c# - 使用 LINQ C# 的动态 LINQ 查询计算百分比
- xml - EWS 请求返回访问限制错误
- python - ttest_1samp 给出的 P_value 错误
- react-native - 我可以使用 react-native-maps 计算两个坐标之间的距离吗?