N3 is, and has always been, the only readable (and human-editable) serialization format for graphs.
N3.parse() can recreate an in-memory graph from it, and provides an API to find a node by id, or all nodes of a given type. (So your entry points to the graph are your decision, not materialized once and for all by fixed root nodes, like in JSON)
From there, you travel the graph just as you would after a JSON.parse(). I.e people.class.teacher.name. And that's it.
(Think of N3 as a set of JSONs being able to have, in them, references to each other's. And N3.parse() as its API.).
More philosophically, JSON-LD made the same mistake as RDF/XML. It chose the trending data exchange, and bastardized N3 to fit into it.
But N3 is indeed a superset of both JSON or XML (or whatever tree-oriented data exchange structure).
I will also add that N3.stringify() is quite easy to implement.
So imho, we should promote N3 and its API.