我想使用shell脚本添加一些内容。我有一个JSON文件 test.json 如下。
{
"reference": "Json Test",
"title": {
"a": "Json Test"
},
"components": [
{
"reference": "Json Test",
"type": "panel",
"content": [
{
"link": "abc/123",
"label": {
"a": "for test 123 - a",
"b": "for test 123 - b"
}
},
{
"link": "abc/456",
"label": {
"a": "for test 456 - a",
"b": "for test 456 - b"
}
},
{
"link": "abc/789",
"label": {
"a": "for test 789 - a",
"b": "for test 789 - b"
}
}
]
}
]
}
我想使用shell脚本(*.sh)添加内容和输出,如下所示。如何实现?
{
"reference": "Json Test",
"title": {
"a": "Json Test"
},
"components": [
{
"reference": "Json Test",
"type": "panel",
"content": [
{
"link": "abc/123",
"label": {
"a": "for test 123 - a",
"b": "for test 123 - b"
}
},
{
"link": "abc/101112",
"label": {
"a": "for test 101112 - a",
"b": "for test 101112 - b"
}
},
{
"link": "abc/456",
"label": {
"a": "for test 456 - a",
"b": "for test 456 - b"
}
},
{
"link": "abc/789",
"label": {
"a": "for test 789 - a",
"b": "for test 789 - b"
}
}
]
}
]
}
我试图访问索引并添加一些测试字符串,下面的命令将替换原始数据。
jq '.components[].content[1] + { "link" : "test" } ' test.json
2条答案
按热度按时间qyswt5oh1#
你可以使用切片过滤器来提取数组的头部和尾部,然后使用
+
来连接头部+新对象+尾部,最后,使用update-assignment|=
来修改数组:如果您打算更频繁地使用这个函数,请考虑定义一个可重用的函数:
olmpazwi2#
获取位置
1
处的空子数组(通过起始和结束位置.[1:1]
,或者通过起始位置和长度.[1:][:0]
进行切片),并将其指定为格式为的插入值(单元素)数组[{"link": "test"}]
(因为你毕竟是在给一个数组赋值--如果你想一次添加所有的项,可以添加更多的项)。这看起来和你最初的尝试差不多:为了方便起见,您还可以将其转换为
insertAt
函数: