Search code examples
textfile-format

Text extraction from a file format unknown to me


I have a lot of files obviously stemming from some web publishing system (unidentified) and want to convert them to plain text. The file format is characterised by a lot of curly braces, square brackets, and semicolons and contains formatting instructions besides the text. A sample file looks like this

{"content":[{"type":"paragraph","attributes":{"class":"align-left"},"content":["У Посольстві України в Республіці Польща 8 листопада було підписано Угоду між урядом України та урядом Монголії про взаємне скасування віз."]},{"type":"paragraph","attributes":{"class":"align-left"},"content":["“Ми підписали угоду, яка дозволяє громадянам України подорожувати без віз до Монголії. Це означає, що громадяни України можуть в’їжджати до Монголії без віз на 90 днів упродовж 180 днів” - ",{"type":"link","attributes":{"href":"https://www.facebook.com/UkraineMFA/posts/2498886686831903","target":"_blank","rel":null},"content":["повідомляє сторінка МЗС у Facebook"]}," із посиланям на посла України у Польщі Андрія Дещицю."]},{"type":"paragraph","attributes":{"class":"align-left"},"content":["Як підкреслив Дещиця, підписана угода важлива ще й тому, що до сьогоднішнього дня між Україною і Монголією діяла угода 1979 року, яка була підписана свого часу між СРСР і Монгольською Народною Республікою, а потім була підтверджена українським урядом."]}]}

What kind of file format is this? Is there a readily available converter to plain text or some documentation on that file format available?


Solution

  • A more readable way, is to use yaml format:

    $ yq -p json -o yaml file
    content:
      - type: paragraph
        attributes:
          class: align-left
        content:
          - У Посольстві України в Республіці Польща 8 листопада було підписано Угоду між урядом України та урядом Монголії про взаємне скасування віз.
      - type: paragraph
        attributes:
          class: align-left
        content:
          - '“Ми підписали угоду, яка дозволяє громадянам України подорожувати без віз до Монголії. Це означає, що громадяни України можуть в’їжджати до Монголії без віз на 90 днів упродовж 180 днів” - '
          - type: link
            attributes:
              href: https://www.facebook.com/UkraineMFA/posts/2498886686831903
              target: _blank
              rel: null
            content:
              - повідомляє сторінка МЗС у Facebook
          - ' із посиланям на посла України у Польщі Андрія Дещицю.'
      - type: paragraph
        attributes:
          class: align-left
        content:
          - Як підкреслив Дещиця, підписана угода важлива ще й тому, що до сьогоднішнього дня між Україною і Монголією діяла угода 1979 року, яка була підписана свого часу між СРСР і Монгольською Народною Республікою, а потім була підтверджена українським урядом.
    

    Or pretty print if as json:

    $ jq . file
    {
      "content": [
        {
          "type": "paragraph",
          "attributes": {
            "class": "align-left"
          },
          "content": [
            "У Посольстві України в Республіці Польща 8 листопада було підписано Угоду між урядом України та урядом Монголії про взаємне скасування віз."
          ]
        },
        {
          "type": "paragraph",
          "attributes": {
            "class": "align-left"
          },
          "content": [
            "“Ми підписали угоду, яка дозволяє громадянам України подорожувати без віз до Монголії. Це означає, що громадяни України можуть в’їжджати до Монголії без віз на 90 днів упродовж 180 днів” - ",
            {
              "type": "link",
              "attributes": {
                "href": "https://www.facebook.com/UkraineMFA/posts/2498886686831903",
                "target": "_blank",
                "rel": null
              },
              "content": [
                "повідомляє сторінка МЗС у Facebook"
              ]
            },
            " із посиланям на посла України у Польщі Андрія Дещицю."
          ]
        },
        {
          "type": "paragraph",
          "attributes": {
            "class": "align-left"
          },
          "content": [
            "Як підкреслив Дещиця, підписана угода важлива ще й тому, що до сьогоднішнього дня між Україною і Монголією діяла угода 1979 року, яка була підписана свого часу між СРСР і Монгольською Народною Республікою, а потім була підтверджена українським урядом."
          ]
        }
      ]
    }
    

    With jq, you can retrieve specifics parts. Ex:

    jq '[.content | .[] | .content][0] | .[]' file
    "У Посольстві України в Республіці Польща 8 листопада було підписано Угоду між урядом України та урядом Монголії про взаємне скасування віз."