запрос, когда имя объекта является URL - PullRequest
0 голосов
/ 22 декабря 2018

Я написал поисковый запрос JQ, который выдает следующее, но я не могу понять, как разобраться в деталях и извлечь из этого конкретную информацию.

{
  "https://www.example.org/rest/relation/node/recording/revision_uid": [
    {
      "_links": {
        "self": {
          "href": "https://www.example.org/user/37?_format=hal_json"
        },
        "type": {
          "href": "https://www.example.org/rest/type/user/user"
        }
      },
      "uuid": [
        {
          "value": "d40684cf-2321-42d2-9194"
        }
      ]
    }
  ],
  "https://www.example.org/rest/relation/node/recording/uid": [
    {
      "_links": {
        "self": {
          "href": "https://www.example.org/user/37?_format=hal_json"
        },
        "type": {
          "href": "https://www.example.org/rest/type/user/user"
        }
      },
      "uuid": [
        {
          "value": "d40684cf-2321-42d2-9194"
        }
      ],
      "lang": "en"
    }
  ],
  "https://www.example.org/rest/relation/node/recording/field_category": [
    {
      "_links": {
        "self": {
          "href": "https://www.example.org/simplecategory?_format=hal_json"
        },
        "type": {
          "href": "https://www.example.org/rest/type/taxonomy_term/tags"
        }
      },
      "uuid": [
        {
          "value": "3fef93d5-926a-41aa-95cb"
        }
      ]
    }
  ],
  "https://www.example.org/rest/relation/node/recording/field_part1_speaker": [
    {
      "_links": {
        "self": {
          "href": "https://www.example.org/by/speakername?_format=hal_json"
        },
        "type": {
          "href": "https://www.example.org/rest/type/taxonomy_term/author"
        }
      },
      "uuid": [
        {
          "value": "fb6c806f-fa6a-4aa0-89ef"
        }
      ]
    }
  ]
}

Как мне написать запрос, который возвращает'https://www.example.org/simplecategory?_format=hal_json'?

И тогда я бы хотел подобный запрос, который возвращает' https://www.example.org/by/speakername?_format=hal_json'

Так что jq '._embedded' получает мне данные выше.

Затем я попробовал различные комбинации, чтобы получить значение https://www.example.org/rest/relation/node/recording/field_category.
- jq '._embedded.https://www.example.org/rest/relation/node/recording/field_category - но, конечно, в URL есть специальные символы.

Я также возился с некоторыми встроенными в JQ функциями, такими как flattenи to_entries, from_entries.Я также пробовал регулярные выражения, но мои усилия возвращаются Cannot iterate over null (null).

1 Ответ

0 голосов
/ 22 декабря 2018

Как написать запрос, который возвращает 'https://www.example.org/simplecategory?_format=hal_json'?

Если вы хотите явно указать ключ верхнего уровня, последующим запросом будет:

.["https://www.example.org/rest/relation/node/recording/revision_uid"][]
| ._links.self.href

То есть весь запрос будет выглядеть следующим образом:

._embedded
| .["https://www.example.org/rest/relation/node/recording/revision_uid"][]
| ._links.self.href

И тогда я бы хотел подобный запрос

Альтернатива указаниюключом верхнего уровня явно может быть выбор интересующего href из массива их всех:

 ._embedded
 | [.[][]._links.self.href]

Это даст:

[
  "https://www.example.org/user/37?_format=hal_json",
  "https://www.example.org/user/37?_format=hal_json",
  "https://www.example.org/simplecategory?_format=hal_json",
  "https://www.example.org/by/speakername?_format=hal_json"
]
...