Skip to main content

SJSON serializer/deserializer for Python

Project description

SJSON

SJSON is a small library to read/write simplified JSON, as described originally on the Bitsquid blog.

License

SJSON is licensed under the two-clause BSD license. See LICENSE.txt for details.

SJSON format

SJSON is very similar to normal JSON (in fact, since release 1.2.0, the SJSON library will also load plain JSON). It mostly reduces the required markup a bit. The main differences are:

  • Every file starts with an implicit object. That is, an empty SJSON file is equivalent to a JSON file containing {}.
  • Commas after a key-value pair are optional.
  • Keys don't have to be quoted as long as they are valid identifiers. An identifier consists of letters, digits, and _.
  • = is allowed in addition to : for key-value separation. The canonical separator is =.
  • C and C++ style comments are allowed.

In addition, this library provides support for raw string literals.

Example

JSON:

{
    "foo" : 23,
    "bar" : [1, 2, 3],
    "baz" : {
        "key" : "value"
    }
}

SJSON:

foo = 23
bar = [1, 2, 3]
baz = {
    // SJSON also allows for comments
    key = "value"
}

As an extension, SJSON allows for raw string literals, in both Lua and Python flavors:

foo = [=[This is a raw literal with embedded " and stuff]=]

foo = """This is a raw literal with embedded " and stuff"""

Usage

The library provides four methods, similar to the Python JSON module. These are:

  • dump: Encode an object as SJSON and write to a stream.
  • dumps: Encode an object as SJSON and return a string.
  • load: Decode a SJSON encoded object from a stream.
  • loads: Decode a SJSON encoded object from a string.

Changelog

2.1.1

  • Packaging changes only. Raised supported Python version to Python 3.12

2.1

  • Add support for Python-style raw strings, delimited by """.
  • Improve handling of unknown string escapes. Previously, those would raise an exception, now they get passed through.

2.0.3

  • Re-release of 2.0.2.

2.0.2

  • Packaging changes only. This release contains packaging changes only and has not been released to the public, use 2.0.3 instead.

2.0.1

  • Add dump in addition to dumps for consistency with the Python JSON module.
  • Additional PEP8 conformance tweaks.

2.0.0

  • The library is now PEP8 compliant. This should not affect most users of this library, the only user-visible change is that ParseException.GetLocation has been renamed to get_location. The core functions have not been renamed and are API compatible.

1.2.0

  • Keys did not get quoted properly during encoding if they contained special characters.
  • List elements were incorrectly indented.
  • List indentation now accepts either a string or a number (similar to the Python JSON module.)
  • Both : and = are now supported as key-value separators, allowing the SJSON library to parse plain JSON files.

1.1.1

  • Add support for C/C++ style comments.
  • Line/column numbers start at 1 now (previously, the first character was in line 0, column 0).

1.1.0

  • Parsing performance has been significantly improved.
  • It is possible to parse a file-like stream or string now.

1.0.4

  • Track position during parsing. This will likely reduce the performance a bit, but allows for much better error messages.
  • Input is byte-oriented now.

1.0.3

  • Add support for raw string literals. These are delimited by [=[ ]=] and don't require escaping inside the string.

1.0.2

  • Strings with whitespace are now properly escaped.

1.0.1

  • Various fixes to string encoding/decoding bugs.
  • Encoding now uses collections.abc to identify sequences and mappings instead of testing directly against list and dict.

1.0.0

Initial PyPI release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sjson-2.1.1.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

sjson-2.1.1-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file sjson-2.1.1.tar.gz.

File metadata

  • Download URL: sjson-2.1.1.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for sjson-2.1.1.tar.gz
Algorithm Hash digest
SHA256 cf5780e66857924d94db3b82309338ff79082a5f9b53b0c48bced2fecca051c0
MD5 c37159c427de4d14f893f7aa92141eb8
BLAKE2b-256 b40ed5f2d5186d9dc063b09f9bbbc63d1747272a484bb962fa1797132dcbc5ec

See more details on using hashes here.

File details

Details for the file sjson-2.1.1-py3-none-any.whl.

File metadata

  • Download URL: sjson-2.1.1-py3-none-any.whl
  • Upload date:
  • Size: 8.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for sjson-2.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4b1c6a0c126e543c3cef5514ecd39ac48bd4d965bdf906658cfc0863eef30531
MD5 7f859311c395f842d83e5d43f0d52aab
BLAKE2b-256 80dad78931e1e32c6f5f78dfcd45044de00c466fca7bb43827070a90747ac3b7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page