It reads the live page and collects every <script type="application/ld+json"> block. Each one is parsed as strict JSON, unpacked if it uses an @graph array, and every entity inside is checked for a @type. A page with no blocks scores 60 — not an error, but a missed opportunity; a page with blocks scores on the share of them that are valid.
How to fix what it finds
Malformed JSON is almost always a trailing comma, an unescaped quote inside a string, or a template that rendered an empty value where a number was expected — paste the block into the JSON Formatter to get the exact line. Missing @type means an entity object has no type declared. Once every block reads as valid here, run the URL through Google's Rich Results Test to check the per-type required properties.