decode

Decodes the hearing table the server publishes for one recognizer build.

The document is {"build": ..., "version": ..., "words": {written: [allowance]}}, each allowance {"heard": ..., "after": ...} with after optional. A missing field, another shape or another type is refused, and so is a table published for another build. A field the table does not know is read past, at any depth, so that a field the server adds later does not stop a build already installed. A key repeated within one object keeps one of its values; which one is not promised and may differ between ports. The table is read as UTF-8, with or without a byte order mark.

This rests on a contract with the server: it may add a field, but never one that changes the meaning of a field read here, such as one that narrows an allowance, and it never renames or drops a field. An allowance whose after is misspelt is read as an allowance with no after, allowed after any word.

Throws

when data is text in another encoding.

when the table was published for another build than build.

SerializationException

when data is not such a table.