jmespath: получение ключей с помощью фильтра свойств - PullRequest
1 голос
/ 14 марта 2019

У меня есть следующий JSON:

{
    "dataset_1": {
        "size_in_mb": 0.5,
        "task": "clean",
        "tags": ["apple", "banana", "strawberry"]
    },
    "dataset_2": {
        "size_in_mb": 100,
        "task": "split",
        "tags": ["apple"]
    },
    "dataset_3": {
        "size_in_mb": 1024,
        "task": "clean",
        "tags": ["strawberry"]
    }
}

Как мне:

  1. получить наборы данных, которые имеют тег "apple"
  2. получить наборы данных, размер которых превышает 500 МБ
  3. получить наборы данных, для которых задание называется "split"

Я могу запросить свойства набора данных, но не могу извлечь имя набора данных с определенным свойством. например, я могу получить ["клубника"], но не ["dataset_1", "dataset_3"], когда "теги" содержат "клубнику".

Этот вопрос близок, но в основном говорит, что вы не можете использовать jmespath.

1 Ответ

0 голосов
/ 23 марта 2019

Вы это поняли

  • Как вы указали в комментарии, наилучшим способом обычно является повторная нормализация исходного набора данных для использования последовательно перечисляемого сопоставления (вместо ключей объекта для сопоставления верхнего уровня). запросы общего назначения с jmespath.

  • Пост Stackoverflow, на который вы ссылались, более подробно расскажет об этом здесь

До и после повторной нормализации набора данных

  • для тех, кому может потребоваться больше подробностей о том, что вы имели в виду, когда вы сказали я немного изменил схему ... вот пример «до и после» того, что это может похож на

До

  {
      "dataset_1": {
          "size_in_mb": 0.5,
          "task": "clean",
          "tags": ["apple", "banana", "strawberry"]
      },
      "dataset_2": {
          "size_in_mb": 100,
          "task": "split",
          "tags": ["apple"]
      },
      "dataset_3": {
          "size_in_mb": 1024,
          "task": "clean",
          "tags": ["strawberry"]
      }
  }

* После 1026 * {"dataroot":[ { "name": "dataset_1", "size_in_mb": 0.5, "task": "clean", "tags": ["apple", "banana", "strawberry"] }, { "name": "dataset_2", "size_in_mb": 100, "task": "split", "tags": ["apple", "banana", "strawberry"] }, { "name": "dataset_3", "size_in_mb": 1024, "task": "clean", "tags": ["strawberry"] } ]}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...