Skip to content

NZME/json-encoder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

json-encoder

  • json encoder uses singledispatch pattern instead of JSONEncoder class overwrites.
  • No more json.dumps(data, cls=MyJSONEncoder) everywhere.
  • Comes with default serialization for time, date, datetime, UUID and Decimal
  • Easy to use, easy to change serialization behaviour
  • Not tight to any json implementation json, simplejson, ujson ...
  • It parse json float numbers into Decimal objects to prevent python float precision issues.

image

image

Installation

$ pip install json-encoder

Quick start

  • Use "json_encoder.json" instead of default python json:

    from json_encoder import json
    
    result = json.dumps(data)

Configuration

  • Chose json implementation:

    # simplejson library is used as default json implementation if present
    # otherwise standard python json implementation is used
    # to use other json implementation globally, do:
    
    import ujson
    from json_encoder import use_json_library
    
    use_json_library(ujson)
  • To change json implementation for concrete call do:

    from json_encoder import json
    import simplejson
    
    result = json.dumps(data, json=simplejson)
  • To make your object JSON serializable do:

    # example how to make python fraction object json serializable
    
    from fractions import Fraction
    from json_encoder.encoder import json_encoder
    
    @json_encoder.register(Fraction)
    def encode_fraction(obj):
        return '{}/{}'.format(obj.numerator, obj.denominator)
  • To overwrite JSON serializer behaviour defined in json_encoder.encoder:

    from uuid import UUID
    from six import text_type
    from json_encoder.encoder import json_encoder
    
    @json_encoder.register(UUID)
    def encode_uuid(obj):
        return text_type(obj).replace('-', '')

Requirements