Take this sample from https://json.org/example.html
cat foo.json
{
  "glossary": {
    "GlossDiv": {
      "GlossList": {
        "GlossEntry": {
          "Abbrev": "ISO 8879:1986",
          "Acronym": "SGML",
          "GlossDef": {
            "GlossSeeAlso": [
              "GML",
              "XML"
            ],
            "para": "A meta-markup language, used to create markup languages such as DocBook."
          },
          "GlossSee": "markup",
          "GlossTerm": "Standard Generalized Markup Language",
          "ID": "SGML",
          "SortAs": "SGML"
        }
      },
      "title": "S"
    },
    "title": "example glossary"
  }
}
Instead of using JQ or higher-level programming language to recurse and nullify values, you can quickly do the following:
- sort keys-value pairs with JQ
- flatten the JSON with GRON
- SED the value portion of the flattened JSON
- unflatten the JSON with GRON
- pretty the JSON with JQ
jq --sort-keys '.' foo.json | gron | sed -E 's~= ".+$~= "";~' | gron -u | jq
{
  "glossary": {
    "GlossDiv": {
      "GlossList": {
        "GlossEntry": {
          "Abbrev": "",
          "Acronym": "",
          "GlossDef": {
            "GlossSeeAlso": [
              "",
              ""
            ],
            "para": ""
          },
          "GlossSee": "",
          "GlossTerm": "",
          "ID": "",
          "SortAs": ""
        }
      },
      "title": ""
    },
    "title": ""
  }
}
You can then use this structure sig in a diff.
