Столбец CSV Выход из вложенного SON - PullRequest
0 голосов
/ 23 марта 2020
[
  {
    "name": "Metadata:MER-2.0-ver AGYW_PREV-Results (Semi Annual)",
    "id": "XOPEXepA7zg",
    "categoryOptions.name": [
      "0 -2 month",
      ">2months-<1 year",
      "< 1 year",
      "(1 - 4) Years",
      "(1-9) Years"
    ],
    "categoryOptions.id": [
      "wfvXckoyaE9",
      "Yi2K2FUDa3B",
      "kKt6hryCX75",
      "A0B8w6HoZvV",
      "upbvx1IvICR"
    ]
  },
  {
    "name": "Metadata:MER-2.0-ver KP-Results (Semi Annual)",
    "id": "k9p3Ghbi6eW",
    "categoryOptions.name": [
      "Sex Workers",
      "People in prisons and other enclosed settings (Incarcerated Population) ",
      "PWID..",
      "MSM",
      "Transgender"
    ],
    "categoryOptions.id": [
      "mwTwhESK21T",
      "eQjIwsDqbPy",
      "zYaPQA3uTiH",
      "vu0dG7psM5W",
      "Jyo9XWumVtZ"
    ]
  },
  {
    "name": "Metadata:MER-2.0-ver PP-Results (Semi Annual)",
    "id": "rkExsSSc3yI",
    "categoryOptions.name": [
      "Adolescents (10-24)",
      "Clients of  Sex Workers",
      "Displaced Persons",
      "Fishing communities",
      "Military and other Uniform Services"
    ],
    "categoryOptions.id": [
      "yWwp6xnt0pw",
      "jlKwW6DC023",
      "wF42hb47Z7J",
      "qkIUghy30Vl",
      "Vcuw6LkdAkk"
    ]
  },
  {
    "name": "Metadata:MER-2.0-ver PREP_CURR-and-TX_ML (Semi Annual)",
    "id": "ZYdO3FqQgo1",
    "categoryOptions.name": [
      "Adolescents (10-24)",
      "Clients of  Sex Workers",
      "Displaced Persons",
      "Fishing communities",
      "Military and other Uniform Services"
    ],
    "categoryOptions.id": [
      "yWwp6xnt0pw",
      "jlKwW6DC023",
      "wF42hb47Z7J",
      "qkIUghy30Vl",
      "Vcuw6LkdAkk"
    ]
  },
  {
    "name": "Metadata:MER-2.0-ver SupplyChain-Results (Semi Annual)",
    "id": "Cub0DEVWs3P",
    "categoryOptions.name": [
      "TLD 30-count bottles",
      "TLD 90-count bottles",
      "TLD 180-count bottles",
      "TLE/400 30-count bottles",
      "TLE/400 90-count bottles"
    ],
    "categoryOptions.id": [
      "dtmTsLvH2dk",
      "sOLj1z1XRxh",
      "SnkZTF4kThV",
      "sNnXSKiPvb5",
      "t3iPChPFIcd"
    ]
  }
]

Ожидаемый вывод должен быть в формате CSV, как показано ниже:

ключ, имя, идентификатор, "categoryOptions.name", "categoryOptions.id"

0,Metadata:MER-2.0-ver AGYW_PREV-Results (Semi Annual),XOPEXepA7zg,0 -2 month,wfvXckoyaE9

0,Metadata:MER-2.0-ver AGYW_PREV-Results (Semi Annual),XOPEXepA7zg,>2months-<1 year,Yi2K2FUDa3B

1,Metadata:MER-2.0-ver KP-Results (Semi Annual),k9p3Ghbi6eW,Sex Workers,mwTwhESK21T

1,Metadata:MER-2.0-ver KP-Results (Semi Annual),k9p3Ghbi6eWPeople in prisons and other enclosed settings (Incarcerated Population),eQjIwsDqbPy

2, метаданные: MER-2.0-ver PP-результаты (полугодовые), rkExsSSc3yI, подростки (10-24), yWwp6xnt0pw

2, метаданные: MER-2.0-ver PP-результаты ( Полугодовой), rkExsSSc3yI, клиенты секс-работников, jlKwW6DC023

upto key4

Вышеуказанный ввод json пришел отсюда ниже:

cat /home/fred/Downloads/metadata/multiple-dataset-metadata.json
| jq '[.dataSets[]
| {name: .name,id: .id,"categoryOptions.name": [.dataSetElements[].dataElement.categoryCombo.categories[].categoryOptions
[].name],"categoryOptions.id": [.dataSetElements[].dataElement.categoryCombo.categories[].categoryOptions[].id]}]'

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Вот одно решение проблемы, насколько я понимаю:

range(0;length) as $i
| .[$i]
| [$i, .name, .id] +
  ( range(0, .["categoryOptions.name"]|length) as $j
    | [ .["categoryOptions.name"][$j], .["categoryOptions.id"][$j] ] )
| @csv

Это производит все, кроме строки заголовка, производство которой оставлено в качестве упражнения.

Вызов

... будет выглядеть так:

jq -r -f program.jq input.json
0 голосов
/ 25 марта 2020

Для добавления в решение пика * *1002*

Окончательный вызов (с заголовком CSV) может выглядеть следующим образом:

jq -r -f program.jq input.json > output.csv && sed  -i '1i "key","name","id","categoryOptions.name","categoryOptions.id"' output.csv

Решение sed выбрано из здесь

...