Skip to content
amak edited this page Aug 19, 2024 · 1 revision

Compliance of jyson

There are two main areas where jyson needs to be compliant.

RFC 4627

JSON was originally specified with a simple syntax diagram on JSON.org

As JSON became more and more widely used, an internet RFC was published by Douglas Crockford, the original creator of JSON. That document is RFC 4627 , which is now the definitive specification for JSON.

I am currently conducting a review of jyson’s compliance with RFC 4627.

The cpython json module.

I originally wrote jyson back in 2005, and devised my own API.

Now, there is a json module in the cpython standard library, as of version 2.6. Which means that jython will need to have a json module when it reaches version 2.6. This may be achieved by running the pure python version of the json module (the cpython json module relies on C extensions for some of it’s speed).

But the C extensions won’t run on jython, meaning that jython will suffer a speed penalty running the existing pure python module.

If jyson can be made to implement the same API as the cpython json module, then I will contribute the module to jython.

Here is a list of the main areas in which there are differences between the APIs

Output to file-like objects

The cpython json module has facilities for the user to decode from and encode to file-like objects, as well as strings.

Jyson only supports decoding from and encoding to strings: how those strings are transcoded for storage or rx/tx over a network is left to user.

Character encodings

Because the cpython json module supports encoding and decoding from file-like objects, it has no choice but to concern itself with character encodings, since file-like objects are byte-oriented.

Jyson leaves the task of character encoding to the user. For example, the character encoding of a JSON document might be declared in a HTTP header, which is available to the programmer, but not to jyson.

When JSON was originally created, it contained no specifications for character encoding. However, RFC 4627 now contains specifications of how JSON codecs should behave in relation to character encodings, and so jyson will have to the same.

Incremental support

The cpython json module supports for generating JSON documents incrementally, i.e. in a series of smaller parts.

Jyson was originally written before jython supported generators, and this does not support this usage pattern.