json 使用jq获取数组的所有值

9w11ddsr  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(167)

我用jq解析了一个json文件:

jq .response[1].text file.json

它工作正常,但每次我都必须输入数字。response[2].text、.response[3].text等。我想一次获得所有值(200个值)
但当我这样做:

jq .response[].text file.json

它给出错误:无法使用字符串“text”对数字进行索引
文件如下所示:

{
  "response": [
    1000,
    {
      "id": ,
      "date": ,
      "owner_id": ,
      "from_id": ,
      "post_type": "post",
      "text": "blabla",
      "attachment": {
        "type": "photo",
        "photo": {
          "pid": ,
          "aid": -7,
          "owner_id": 
        }
      },
      "attachments": [
        {
          "type": "photo",
          "photo": {
          }
        },
        {
          "type": "link",
          "link": {
            "url": "",
            "title": "",
            "description": "",
            "target": "external"
          }
        }
      ],
      "post_source": {
        "type": "vk"
      },
      "comments": {
        "count": 0,
        "groups_can_post": true,
        "can_post": 1
      },
    },
    {
      "id": ,
      "date": ,
      "owner_id": ,
      "from_id": ,
      "post_type": "post",
      "text":    "blabla",
      "attachment": {
        "type": "link",
        "link": {
          "url": "",
          "title": "",
          "description": "",
          "target": "external",
          "
        }
eh57zj3b

eh57zj3b1#

显然数组中的一个元素是字符串。如果你的jq支持“?",那么一种可能性是使用它:

.response[].text?

另一种方法是显式检查类型,例如:

.response[] | objects | .text

还有一种可能:

.response[] | select(type=="object" and has("text")) | .text

如果要在没有“文本”字段时使用占位符值:

.response[] | if type=="object" and has("text") then .text else null end

因此,这实际上取决于您的需求,也许还取决于您使用的jq版本。

相关问题