我有一个messages.json文件
[
{
"id": "title",
"description": "This is the Title",
"defaultMessage": "title",
"filepath": "src/title.js"
},
{
"id": "title1",
"description": "This is the Title1",
"defaultMessage": "title1",
"filepath": "src/title1.js"
},
{
"id": "title2",
"description": "This is the Title2",
"defaultMessage": "title2",
"filepath": "src/title2.js"
},
{
"id": "title2",
"description": "This is the Title2",
"defaultMessage": "title2",
"filepath": "src/title2.js"
},
]
我想创建一个对象
{
"title": "Dummy1",
"title1": "Dummy2",
"title2": "Dummy3",
"title3": "Dummy4"
}
从顶部开始。 到目前为止我已经
了jq '.[] | .id' src/messages.json;
它确实给了我ID 如何添加一些随机文本并使新对象如上所述?
我们还可以创建一个新的JSON文件,并使用jq将新创建的对象写入其中吗?
答案 0 :(得分:0)
您的输出包含“title3”所以我假设您打算在输入中第二次出现“title2”应该引用“title3”。
通过这个假设,以下jq程序似乎可以做你想要的:
map( .id )
| . as $in
| reduce range(0;length) as $i ({};
. + {($in[$i]): "dummy\(1+$i)"})
在单词中,提取.id的值,然后将每个值转换为表单的对象:{(.id) : "dummy\(1+$i)"}
这使用字符串插值,并产生:
{
"title": "dummy1",
"title1": "dummy2",
"title2": "dummy3",
"title3": "dummy4"
}
map(.id )
| [., [range(0;length)]]
| transpose
| map( {(.[0]): "dummy\(.[1]+1)"})
| add
我们还可以创建一个新的json文件,并使用jq将新创建的对象写入其中吗?
是的,只需使用输出重定向:
jq -f program.jq messages.json > output.json
我想要一个父对象“de”到已创建的json文件对象
您可以将以上任一解决方案管道传输到:{de: .}