Есть ли способ получить доступ к значениям из верхнего массива, а также получить информацию из вложенного массива с помощью jmespath? - PullRequest
0 голосов
/ 24 июня 2019

У меня возникла проблема при попытке преобразовать мой json с вложенными объектами в несколько объектов.Глядя на мой JSON ниже, вы можете увидеть пример того, что я получил

{
  "name": "Isa Hemd ",
  "colors": [
    {
      "color": "Deep Forest",
      "sizes": [
        {
          "GTIN": "5712973396589",
          "size": "34"
        },
        {
          "GTIN": "5712973396596",
          "size": "36"
        },
        {
          "GTIN": "5712973396602",
          "size": "38"
        },
        {
          "GTIN": "5712973396619",
          "size": "40"
        },
        {
          "GTIN": "5712973396626",
          "size": "42"
        },
        {
          "GTIN": "5712973396633",
          "size": "44"
        },
        {
          "GTIN": "5712973396640",
          "size": "46"
        },
        {
          "GTIN": "5712973396657",
          "size": "48"
        }
      ],
      "code_color": "59141"
    }
  ],
  "materials": [
    {
      "Viscose": "65"
    },
    {
      "Modal": "35"
    }
  ],
  "description": "Dieses Hemd ist ein echtes Lieblingsstück im Kleiderschrank. Es hat ein klassisches Hemddesign mit Hemdkragen und langen Ärmeln. Die Knopfleiste des Hemds wird durch ein elegantes Streifen-Design abgerundet.  Das Hemd besteht darüber hinaus zu 100%  aus Viskose, die sich leicht und angenehm auf der Haut anfühlt. Ihre Kleidung von LauRie wird ohne Allergene und gesundheitsschädliche Chemikalien hergestellt.",
  "style_number": "30821"
}

Я хочу сделать отдельные объекты для всех цветов -> комбинаций размеров, таких как

 {
      "color": "Deep Forest",
      "size": "34",
      "GTIN": "5712973396589"
 },
 {
      "color": "Deep Forest",
      "size": "36",
      "GTIN": "5712973396596"
 }
 ...

С болееданные оф.возможно, используется.

Однако, используя цвета [*] .sizes [*], я не могу понять, как я могу сначала получить значения из цветов, прежде чем перейти к размерам.Я подумал, что, возможно, использование индекса массива было бы способом, так как я мог бы затем немного его взломать и сохранить содержимое для последующего извлечения, но, видимо, получить его тоже невозможно:)

Как я могу конвертировать мойjson с множеством вложенных массивов в несколько объектов для каждой комбинации x и y?

Цель состоит в том, чтобы позже преобразовать его в excel со строкой для каждой комбинации объектов, где я мог бы использовать jmespath для преобразования и jsonschemaдля проверки содержимого перед этим.

1 Ответ

1 голос
/ 22 июля 2019

Я нашел жестко запрограммированный способ получения результата, я попытаюсь сделать это динамически, если у меня будет время, но сейчас вот жестко запрограммированный запрос:

@.{sizes: sizes[*], colors: {color: color}} | merge({colors: colors}, sizes[*]) | [merge("0","colors"),merge("1","colors"),merge("2","colors"),merge("3","colors"),merge("4","colors"),merge("5","colors"),merge("6","colors"),merge("7","colors")]

это дает:

[
  {
    "GTIN": "5712973396589",
    "size": "34",
    "color": "Deep Forest"
  },
  {
    "GTIN": "5712973396596",
    "size": "36",
    "color": "Deep Forest"
  },
  {
    "GTIN": "5712973396602",
    "size": "38",
    "color": "Deep Forest"
  },
  {
    "GTIN": "5712973396619",
    "size": "40",
    "color": "Deep Forest"
  },
  {
    "GTIN": "5712973396626",
    "size": "42",
    "color": "Deep Forest"
  },
  {
    "GTIN": "5712973396633",
    "size": "44",
    "color": "Deep Forest"
  },
  {
    "GTIN": "5712973396640",
    "size": "46",
    "color": "Deep Forest"
  },
  {
    "GTIN": "5712973396657",
    "size": "48",
    "color": "Deep Forest"
  }
]
...