Taken from this amazing answer and condensed to a one-line grep:
grep -Po '(?(DEFINE)(?<ws>[\t\n\r ]*)(?<number>-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[Ee][+-]?\d++)?)(?<boolean>true|false|null)(?<string>"(?:[^\\"\x00-\x1f]|\\["\\bfnrt\/]|\\u[0-9A-Fa-f]{4})*")(?<pair>(?&ws)(?&string)(?&ws):(?&value))(?<array>\[(?:(?&value)(?:,(?&value))*)?(?&ws)\])(?<object>\{(?:(?&pair)(?:,(?&pair))*)?(?&ws)\})(?<value>(?&ws)(?:(?&number)|(?&boolean)|(?&string)|(?&array)|(?&object))(?&ws)))(?&object)'
Useful for grepping mixed logs, extrating JSON and then processing it with jq