Přetvořit JSON Soubor s JQ odizolování čárky z objektů

0

Otázka

Stavím ROKU aplikaci a jsem formátování json souboru vytáhl z API musí být ve stejném formátu, jako ROKU Přímé Vydavatele krmiva.

To je to, co ROKU čeká...

{
    "providerName": "Acme Productions",
    "lastUpdated": "2015-11-11T22:21:37+00:00",
    "language": "en",
    "categories": [
        ...
    ],
    "playlists": [
        ...
    ],
    "movies": [
        ...
    ],
    "liveFeeds": [
        ...
    ],
    "series": [
        ...
    ],
    "shortFormVideos":  [
        ...
    ],
    "tvSpecials": [
        ...
    ]
}

Používám jq, aby ji přetvořit a mám problém.

Můj současný json soubor je v podstatě jako to a jde dál a dál a dál (já jsem svlékl většinu z toho ven jako klíče jedno, na co se ptám...)

{
"page_info":{
    "total_results":1000,
    "results_per_page":50
},
"results":[
    {
        "category":"B-Roll",
        "aspect_ratio":"16:9",
        "duration":1851,
        "hd":true,
        "title":"Title",
        "id":"video:822667",
        "type":"video",
        "keywords":"removed",
        "credit":"Removed",
        "country":"United States",
        "city":"",
        "hls_url":"file"
    },
    {
        "category":"B-Roll",
        "aspect_ratio":"16:9",
        "duration":1851,
        "hd":true,
        "title":"Title",
        "id":"video:822667",
        "type":"video",
        "keywords":"removed",
        "credit":"Removed",
        "country":"United States",
        "city":"",
        "hls_url":"file"
    },
    {
         "category":"B-Roll",
        "aspect_ratio":"16:9",
        "duration":1851,
        "hd":true,
        "title":"Title",
        "id":"video:822667",
        "type":"video",
        "keywords":"removed",
        "credit":"Removed",
        "country":"United States",
        "city":"",
        "hls_url":"file"
    }
]}

Tohle je můj jq filtr - .results[] | {"providerName":"CrozTest" } + {"language": "en-us"} + {"lastUpdated": .timestamp} + {"shortFormVideos": [{"title": .title, "thumbnail": .thumbnail, "longDescription": .short_description, "shortDescription": .short_description, "id": .id, "releaseDate": .timestamp, "genres": ["technology"], "tags": [.branch], "content": {"duration": .duration, "dateAdded": .timestamp, "videos": [{url: .hls_url, quality: "HD", videoType: "HLS", dateAdded: .publishdate,}]}}]}

Když jsem se použít to, vrtačky dolů .výsledky[], zobrazí všechno v pořádku, ale odstraňuje čárka mezi objekty a přidává své "poskytovatel jméno, jazyk, aktualizované a shortformvideos" pro každý objekt. Teď musím udržet čárky mezi objekty a zobrazit pouze poskytovatel/jazyk/datum/shortform v horní části souboru jako jsem i nadále manipulovat objektu být ve správném formátu, který ROKU chce.

To je to, co se zobrazí, když jsem běžet můj kód...

{
  "providerName": "CrozTest",
  "language": "en-us",
  "lastUpdated": null,
  "shortFormVideos": [
    {
      "title": "Title",
      "thumbnail": null,
      "longDescription": null,
      "shortDescription": null,
      "id": "video:822667",
      "releaseDate": null,
      "genres": [
        "technology"
      ],
      "tags": [
        null
      ],
      "content": {
        "duration": 1851,
        "dateAdded": null,
        "videos": [
          {
            "url": "file",
            "quality": "HD",
            "videoType": "HLS",
            "dateAdded": null
          }
        ]
      }
    }
  ]
}
{
  "providerName": "CrozTest",
  "language": "en-us",
  "lastUpdated": null,
  "shortFormVideos": [
    {
      "title": "Title",
      "thumbnail": null,
      "longDescription": null,
      "shortDescription": null,
      "id": "video:822667",
      "releaseDate": null,
      "genres": [
        "technology"
      ],
      "tags": [
        null
      ],
      "content": {
        "duration": 1851,
        "dateAdded": null,
        "videos": [
          {
            "url": "file",
            "quality": "HD",
            "videoType": "HLS",
            "dateAdded": null
          }
        ]
      }
    }
  ]
}
{
  "providerName": "CrozTest",
  "language": "en-us",
  "lastUpdated": null,
  "shortFormVideos": [
    {
      "title": "Title",
      "thumbnail": null,
      "longDescription": null,
      "shortDescription": null,
      "id": "video:822667",
      "releaseDate": null,
      "genres": [
        "technology"
      ],
      "tags": [
        null
      ],
      "content": {
        "duration": 1851,
        "dateAdded": null,
        "videos": [
          {
            "url": "file",
            "quality": "HD",
            "videoType": "HLS",
            "dateAdded": null
          }
        ]
      }
    }
  ]
}

Teď jsem právě teď začíná nudle kolem s jq, a to je to, co jsem se snaží dostat...

      {
          "providerName": "CrozTest",
          "language": "en-us",
          "lastUpdated": "2021-11-21T19:24:03.750Z",
          "shortFormVideos": [
        {
                "category":"B-Roll",
                "aspect_ratio":"16:9",
                "duration":1851,
                "hd":true,
                "title":"Title",
                "id":"video:822667",
                "type":"video",
                "keywords":"removed",
                "credit":"Removed",
                "country":"United States",
                "city":"",
                "hls_url":"file",
          "id": "video:822412",
          "releaseDate": "2021-11-21T18:21:04.353Z",
          "genres": [
            "technology"
          ],
          "tags": [
            "tag"
          ],
          "content": {
            "duration": 160,
            "dateAdded": "2021-11-21T18:21:04.353Z",
            "videos": [
              {
                "url": "hls_url",
                "quality": "HD",
                "videoType": "HLS",
                "dateAdded": "2021-11-21T18:19:31Z"
              }
            ]
          }
        },
        {
                "category":"B-Roll",
                "aspect_ratio":"16:9",
                "duration":1851,
                "hd":true,
                "title":"Title",
                "id":"video:822667",
                "type":"video",
                "keywords":"removed",
                "credit":"Removed",
                "country":"United States",
                "city":"",
                "hls_url":"file",
          "id": "video:822412",
          "releaseDate": "2021-11-21T18:21:04.353Z",
          "genres": [
            "technology"
          ],
          "tags": [
            "tag"
          ],
          "content": {
            "duration": 160,
            "dateAdded": "2021-11-21T18:21:04.353Z",
            "videos": [
              {
                "url": "hls_url",
                "quality": "HD",
                "videoType": "HLS",
                "dateAdded": "2021-11-21T18:19:31Z"
              }
            ]
          }
        },
{
                "category":"B-Roll",
                "aspect_ratio":"16:9",
                "duration":1851,
                "hd":true,
                "title":"Title",
                "id":"video:822667",
                "type":"video",
                "keywords":"removed",
                "credit":"Removed",
                "country":"United States",
                "city":"",
                "hls_url":"file",
          "id": "video:822412",
          "releaseDate": "2021-11-21T18:21:04.353Z",
          "genres": [
            "technology"
          ],
          "tags": [
            "tag"
          ],
          "content": {
            "duration": 160,
            "dateAdded": "2021-11-21T18:21:04.353Z",
            "videos": [
              {
                "url": "hls_url",
                "quality": "HD",
                "videoType": "HLS",
                "dateAdded": "2021-11-21T18:19:31Z"
              }
            ]
          }
        } 
          ]
        }
command-line-interface jq json
2021-11-23 01:01:11
1

Nejlepší odpověď

0

To je těžké, aby tento test, protože váš vstup je chybí téměř ve všech jeho oblastech, ale:

# header
{providerName: "CrozTest", language: "en-us", lastUpdated: (.results[].timestamp | max)} +
# the bit after the | is repeated for every element of results
{shortFormVideos: [.results[] |
  {title, thumbnail, id,
   longDescription: .short_description,
   shortDescription: .short_description,
   releaseDate: .timestamp,
   genres: ["technology"], 
   tags: [.branch],
   content:
    {duration,
     dateAdded: .timestamp, 
     videos: [{url: .hls_url,
               quality: "HD",
               videoType: "HLS",
               dateAdded: .publishdate}]}
}]}

Objasnit, co je špatně s vaším přístupem: .results[] | ... spustí filtr jednou za prvek results. Výsledek každého filtru je na výstupu jako samostatný objekt JSON – nebo jak to nazýváte – "stripping čárky".

Můj přístup vloží .results[] uvnitř výsledný objekt. Pokud zjistíte, že je více čitelné, můžete si také udělat .results | map({...}) | {providerName: ......., shortFormVideos: .}

2021-11-23 12:42:50

JSTE ROCK!!! Děkuji moc! To je perfektní!
Crosby Shaterian

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................