Jq: группировать объекты по строке

У меня есть json от евростата, который выглядит так:

{
  "version": "2.0",
  "label": "Principaux agrégats des administrations publiques, y compris recettes et dépenses",
  "href": "http://ec.europa.eu/eurostat/wdds/rest/data/v2.1/json/fr/gov_10a_main?unit=PC_GDP&na_item=TE&sector=S13&time=2008&time=2009&time=2010&time=2011&time=2012&time=2013&time=2014&time=2015&time=2016&time=2017&geo=DE&geo=AT&geo=BE&geo=BG&geo=CY&geo=HR&geo=FI",
  "source": "Eurostat",
  "updated": "2018-10-26",
  "status": {
    "57": "b"
  },
  "extension": {
    "datasetId": "gov_10a_main",
    "lang": "FR",
    "description": null,
    "subTitle": null,
    "status": {
      "label": {
        "b": "rupture de série"
      }
    }
  },
  "class": "dataset",
  "value": {
    "0": 49.9,
    "1": 54.1,
    "2": 52.8,
    "3": 50.9,
    "4": 51.2,
    "5": 51.6,
    "6": 52.4,
    "7": 51.1,
    "8": 50.3,
    "9": 49.2,
    "10": 50.3,
    "11": 54.2,
    "12": 53.3,
    "13": 54.5,
    "14": 55.9,
    "15": 55.8,
    "16": 55.3,
    "17": 53.7,
    "18": 53,
    "19": 52.2,
    "20": 37.1,
    "21": 39.4,
    "22": 36.2,
    "23": 33.8,
    "24": 34.5,
    "25": 37.7,
    "26": 43.1,
    "27": 40.5,
    "28": 35.1,
    "29": 35.1,
    "30": 38.4,
    "31": 42.1,
    "32": 42,
    "33": 42.3,
    "34": 41.9,
    "35": 41.9,
    "36": 48.8,
    "37": 40.6,
    "38": 38,
    "39": 37.5,
    "40": 43.6,
    "41": 47.6,
    "42": 47.3,
    "43": 44.7,
    "44": 44.3,
    "45": 44.7,
    "46": 44,
    "47": 43.7,
    "48": 43.9,
    "49": 43.9,
    "50": 48.3,
    "51": 54.8,
    "52": 54.8,
    "53": 54.4,
    "54": 56.2,
    "55": 57.5,
    "56": 58.1,
    "57": 57.1,
    "58": 55.9,
    "59": 54,
    "60": 45.3,
    "61": 48.3,
    "62": 48,
    "63": 48.5,
    "64": 47.8,
    "65": 47.6,
    "66": 48.1,
    "67": 48.3,
    "68": 46.9,
    "69": 45
  },
  "dimension": {
    "unit": {
      "label": "unit",
      "category": {
        "index": {
          "PC_GDP": 0
        },
        "label": {
          "PC_GDP": "Pourcentage du produit intérieur brut (PIB)"
        }
      }
    },
    "sector": {
      "label": "sector",
      "category": {
        "index": {
          "S13": 0
        },
        "label": {
          "S13": "Administrations publiques"
        }
      }
    },
    "na_item": {
      "label": "na_item",
      "category": {
        "index": {
          "TE": 0
        },
        "label": {
          "TE": "Total des dépenses des administrations publiques"
        }
      }
    },
    "geo": {
      "label": "geo",
      "category": {
        "index": {
          "AT": 0,
          "BE": 1,
          "BG": 2,
          "CY": 3,
          "DE": 4,
          "FI": 5,
          "HR": 6
        },
        "label": {
          "AT": "Autriche",
          "BE": "Belgique",
          "BG": "Bulgarie",
          "CY": "Chypre",
          "DE": "Allemagne (jusqu'en 1990, ancien territoire de la RFA)",
          "FI": "Finlande",
          "HR": "Croatie"
        }
      }
    },
    "time": {
      "label": "time",
      "category": {
        "index": {
          "2008": 0,
          "2009": 1,
          "2010": 2,
          "2011": 3,
          "2012": 4,
          "2013": 5,
          "2014": 6,
          "2015": 7,
          "2016": 8,
          "2017": 9
        },
        "label": {
          "2008": "2008",
          "2009": "2009",
          "2010": "2010",
          "2011": "2011",
          "2012": "2012",
          "2013": "2013",
          "2014": "2014",
          "2015": "2015",
          "2016": "2016",
          "2017": "2017"
        }
      }
    }
  },
  "id": [
    "unit",
    "sector",
    "na_item",
    "geo",
    "time"
  ],
  "size": [
    1,
    1,
    1,
    7,
    10
  ]
}

Я хочу создать файл csv.

Во-первых, мне нужно объединить .status с .value по строке (извините за мои плохие знания json) -> "status": {"57": "b"} с "value": {"57": 57.1}.

Во-вторых, мне нужно создать ту же таблицу, что и исходная (загруженная из Евростата).

Я пробую много команд jq, например:

.status,.value | to_entries

Я далек от решения.

Любая помощь? Я думаю, что нужна команда map или map_values ​​/ group_by, но я не совсем понимаю эти функции.

РЕДАКТИРОВАТЬ :

Качаю данные с Евростат.

Я использую их веб-сервис здесь, откуда могу загружать данные в формате json.

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

GEO / TIME, 2010,2011,2012,2013,2014,2015,2016,2017 Belgique, «53,3», «54,5», «55,9», «55,8», «55,3», «53,7», «53,0», «52,2» Булгария, «36,2», «33,8», «34,5», «37,7», «43,1», «40,5», «35,1», «35,1» «Allemagne (jusqu'en 1990, ancien Territoire de la RFA)», «47,3», «44,7», «44,3», «44,7», «44,0», «43,7» "," 43,9 "," 43,9 " Хорватский, «48,0», «48,5», «47,8», «47,6», «48,1», «48,3», «46,9», «45,0» Шипр, «42,0», «42,3», «41,9», «41,9», «48,8», «40,6», «38,0», «37,5» Finlande, «54,8», «54,4», «56,2», «57,5», «58,1», «57,1», «55,9», «54,0»

Но json содержит метаданные, а Finlande должно иметь значение 57,1b.

Надеюсь, с этим редактированием все станет более ясным.

И большое спасибо за вашу помощь.

По первой части должен работать .value[.status|keys[]]. Непонятно, как на самом деле выглядит желаемый файл CSV.

chepner 27.11.2018 19:33

спасибо, но он производит всего 57,1

GillesF 27.11.2018 20:25
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
2
805
1

Ответы 1

Ваш вопрос не очень точно указывает, какой результат вы хотите, но, надеюсь, вы сможете адаптировать следующее:

.value as $dict
| .status
| to_entries
| map( [.key, .value, $dict[.key]] )
| .[]
| @csv

С вашим вводом и вызовом jq с параметром -r это дает:

"57","b",57.1

извините, я постараюсь лучше объяснить. Отредактирую пост.

GillesF 27.11.2018 20:15

Другие вопросы по теме