如何用jq过滤和替换json中的值
我在使用jq过滤和更新json文件的内容时遇到问题。我需要根据特定值过滤json数据,并根据该过滤器编辑其他值并增加其他值 我试着用如何用jq过滤和替换json中的值,json,jq,Json,Jq,我在使用jq过滤和更新json文件的内容时遇到问题。我需要根据特定值过滤json数据,并根据该过滤器编辑其他值并增加其他值 我试着用 jq '.[] | select (."name"| contains("CHANNEL1"))' 要筛选但结果缺少顶键x-ID.0信息,结果如下: { "_file.name": "filename.ext", "name": "CHANNEL1 HD TV", "logo": "file.png", "x-channelID": "726"
jq '.[] | select (."name"| contains("CHANNEL1"))'
要筛选但结果缺少顶键x-ID.0信息,结果如下:
{
"_file.name": "filename.ext",
"name": "CHANNEL1 HD TV",
"logo": "file.png",
"x-channelID": "726"
}
{
"_file.m3u.name": "filename.ext",
"name": "CHANNEL1 SD",
"logo": "file.png",
"x-channelID": "726"
}
to_entries | map(select(.value.name|strings|contains("CHANNEL1"))) | [foreach .[] as $keyvalue (99; .+1; { key: $keyvalue.key, value: ($keyvalue.value + {"x-channelID": .})})] | from_entries
为了重新编号,我测试了下面的函数,它运行良好
jq -n -s '[ foreach inputs[] as $i (100; .+1; $i*{"x-channelID":(.-1)}) ]'
这是原始的json文件
{
"x-ID.0": {
"_file.name": "filename.ext",
"name": "CHANNEL1 HD TV",
"logo": "file.png",
"x-channelID": "726"
},
"x-ID.2": {
"_file.m3u.name": "filename.ext",
"name": "CHANNEL2",
"logo": "file.png",
"x-channelID": "106"
},
"x-ID.3": {
"_file.m3u.name": "filename.ext",
"name": "CHANNEL3 SD",
"logo": "file.png",
"x-channelID": "236"
},
"x-ID.4": {
"_file.m3u.name": "filename.ext",
"name": "CHANNEL1 SD",
"logo": "file.png",
"x-channelID": "726"
},
"x-ID.5": {
"_file.m3u.name": "filename.ext",
"name": "CHANNEL2 HD",
"logo": "file.png",
"x-channelID": "726"
}
}
以下是预期结果
{
"x-ID.0": {
"_file.m3u.name": "filename.ext",
"name": "CHANNEL1 HD",
"logo": "CHANNEL1.png",
"x-channelID": "100"
},
"x-ID.4": {
"_file.m3u.name": "filename.ext",
"name": "CHANNEL1 SD",
"logo": "CHANNEL1.png",
"x-channelID": "101"
}
}
谢谢你的帮助 您可以使用以下选项:
{
"_file.name": "filename.ext",
"name": "CHANNEL1 HD TV",
"logo": "file.png",
"x-channelID": "726"
}
{
"_file.m3u.name": "filename.ext",
"name": "CHANNEL1 SD",
"logo": "file.png",
"x-channelID": "726"
}
to_entries | map(select(.value.name|strings|contains("CHANNEL1"))) | [foreach .[] as $keyvalue (99; .+1; { key: $keyvalue.key, value: ($keyvalue.value + {"x-channelID": .})})] | from_entries
将对象映射到{key:key,value:value}项数组中
mapselectfilter筛选值与条件匹配的对象
然后使用foreach递增计数器,同时迭代剩余的键/值对,并使用计数器更新值的x-channelID字段
最后,我们使用from_条目从键/值对数组中重新创建所需的对象
您可以。您可以使用以下选项:
{
"_file.name": "filename.ext",
"name": "CHANNEL1 HD TV",
"logo": "file.png",
"x-channelID": "726"
}
{
"_file.m3u.name": "filename.ext",
"name": "CHANNEL1 SD",
"logo": "file.png",
"x-channelID": "726"
}
to_entries | map(select(.value.name|strings|contains("CHANNEL1"))) | [foreach .[] as $keyvalue (99; .+1; { key: $keyvalue.key, value: ($keyvalue.value + {"x-channelID": .})})] | from_entries
将对象映射到{key:key,value:value}项数组中
mapselectfilter筛选值与条件匹配的对象
然后使用foreach递增计数器,同时迭代剩余的键/值对,并使用计数器更新值的x-channelID字段
最后,我们使用from_条目从键/值对数组中重新创建所需的对象
您可以。评论不用于扩展讨论;此对话已结束。评论不用于扩展讨论;这段对话已经结束。