Используйте jq для "очистки" значений - PullRequest
1 голос
/ 08 мая 2020

Используя произвольный с , как я могу напечатать версию с «значениями», очищенными до «пустого». (извините, если я теряю терминологию).

Итак, в основном от этого:

{
  "colors": [
    {
      "color": "black",
      "category": "hue",
      "type": "primary",
      "code": {
        "rgba": [255,255,255,1],
        "hex": "#000"
      }
    }
  ]
}

до этого:

{
  "colors": [
    {
      "color": "",
      "category": "",
      "type": "",
      "code": {
        "rgba": ,
        "hex": ""
      }
    }
  ]
}

Или от этого:

{
  "kind": "youtube#searchListResponse",
  "etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/PaiEDiVxOyCWelLPuuwa9LKz3Gk\"",
  "nextPageToken": "CAUQAA",
  "regionCode": "KE",
  "pageInfo": {
    "totalResults": 4249,
    "resultsPerPage": 5
  },
  "items": [
    {
      "kind": "youtube#searchResult",
      "etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/2dIR9BTfr7QphpBuY3hPU-h5u-4\"",
      "id": {
        "kind": "youtube#video",
        "videoId": "IirngItQuVs"
      }
    }
  ]
}

К этому (или приблизительного эквивалент):

{
  "kind": "",
  "etag": "",
  "nextPageToken": "",
  "regionCode": "",
  "pageInfo": {
    "totalResults": ,
    "resultsPerPage":
  },
  "items": [
    {
      "kind": "",
      "etag": "",
      "id": {
        "kind": "",
        "videoId": ""
      }
    }
  ]
}

1 Ответ

3 голосов
/ 08 мая 2020

Вы можете получить пути к не повторяющимся значениям на любом уровне ввода, используя paths(scalars), и обновить их, используя пустые значения, используя reduce и setpath - getpath встроенные модули .

{null: null, boolean: false, number: 0, string: ""} as $e
| reduce paths(scalars) as $p (.; setpath($p; $e[getpath($p)|type])

демонстрация на jqplay.org

...