我有这样的 JSON:
{
"photo_807": "Ih2RnaBTg2o.jpg",
"photo_604": "zodCm9fQgX8.jpg",
"photo_130": "4Dx-SUNKBw4.jpg",
"photo_75": "7COWb8ou1qA.jpg",
"user_id": 100,
"owner_id": -2435432542783750,
"access_key": "fc5275423676514042234324265cc3df7607c",
"post_id": 380435645368865101,
"date": 14858616848616779856424245814,
"text": "",
"height": 417,
"width": 740,
"id": 45624575446886886564368555,
"album_id": -36
}
Run Code Online (Sandbox Code Playgroud)
我只想获取照片值,从输出中我想得到这个:
"photo_807": "Ih2RnaBTg2o.jpg"
"photo_604": "zodCm9fQgX8.jpg"
"photo_130": "4Dx-SUNKBw4.jpg"
Run Code Online (Sandbox Code Playgroud)
现在关于我的问题,从下一个 JSON 文件中,我将获得具有新名称的照片项目,如下所示:
"photo_181": "Ih2RnaBTg2o.jpg",
"photo_583": "zodCm9fQgX8.jpg",
"photo_975": "4Dx-SUNKBw4.jpg",
"photo_32": "7COWb8ou1qA.jpg",
Run Code Online (Sandbox Code Playgroud)
如何从动态项目 photo_* 中获取该值?
我尝试这样的事情:
cat ./json3.txt | jq '.response.items[].attachments[].photo | select(.photo | startswith("photo"))'
Run Code Online (Sandbox Code Playgroud)
但这不起作用。
当我跑步时:
cat ./json3.txt | jq '.response.items[].attachments[].photo'
Run Code Online (Sandbox Code Playgroud)
我得到了所有项目的输出:
{
"photo_807": "Ih2RnaBTg2o.jpg",
"photo_604": "zodCm9fQgX8.jpg",
"photo_130": "4Dx-SUNKBw4.jpg",
"photo_75": "7COWb8ou1qA.jpg",
"user_id": 100,
"owner_id": -2435432542783750,
"access_key": "fc5275423676514042234324265cc3df7607c",
"post_id": 380435645368865101,
"date": 14858616848616779856424245814,
"text": "",
"height": 417,
"width": 740,
"id": 45624575446886886564368555,
"album_id": -36
}
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗?
提前致谢!
您可以使用jq如下过滤器,如在jq-play上测试的那样!
jq '. | to_entries[] | select(.key | startswith("photo")) | "\(.key) :\(.value)"' json
"photo_807 :Ih2RnaBTg2o.jpg"
"photo_604 :zodCm9fQgX8.jpg"
"photo_130 :4Dx-SUNKBw4.jpg"
"photo_75 :7COWb8ou1qA.jpg"
Run Code Online (Sandbox Code Playgroud)
这个想法是使用内置的to_entries[],它将您的输入转换为键值对,如下所示。请参阅下面仅使用的输出to_entries[]
jq '. | to_entries[]' json
{
"key": "photo_807",
"value": "Ih2RnaBTg2o.jpg"
}
{
"key": "photo_604",
"value": "zodCm9fQgX8.jpg"
}
{
"key": "photo_130",
"value": "4Dx-SUNKBw4.jpg"
}
{
"key": "photo_75",
"value": "7COWb8ou1qA.jpg"
}
{
"key": "user_id",
"value": 100
}
{
"key": "owner_id",
"value": -2435432542783750
}
{
"key": "access_key",
"value": "fc5275423676514042234324265cc3df7607c"
}
{
"key": "post_id",
"value": 380435645368865100
}
{
"key": "date",
"value": 14858616848616779000000000000
}
{
"key": "text",
"value": ""
}
{
"key": "height",
"value": 417
}
{
"key": "width",
"value": 740
}
{
"key": "id",
"value": 45624575446886885000000000
}
{
"key": "album_id",
"value": -36
}
Run Code Online (Sandbox Code Playgroud)
在此输出中,我们正在过滤以.key您的字符串开头的值(photo在您的情况下),使用内置的startswith(),并打印匹配对象的.key和对。.value