pecan.jsonify – Pecan JSON Support

The pecan.jsonify module includes support for JSON rule creation using generic functions.

class pecan.jsonify.GenericJSON(skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, encoding='utf-8', default=None)

Bases: json.encoder.JSONEncoder

Generic JSON encoder. Makes several attempts to correctly JSONify requested response objects.

default(obj)

Converts an object and returns a JSON-friendly structure.

Parameters:obj – object or structure to be converted into a JSON-ifiable structure

Considers the following special cases in order:

  • object has a callable __json__() attribute defined

    returns the result of the call to __json__()

  • date and datetime objects

    returns the object cast to str

  • Decimal objects

    returns the object cast to float

  • SQLAlchemy objects

    returns a copy of the object.__dict__ with internal SQLAlchemy parameters removed

  • SQLAlchemy ResultProxy objects

    Casts the iterable ResultProxy into a list of tuples containing the entire resultset data, returns the list in a dictionary along with the resultset “row” count.

    Note

    {‘count’: 5, ‘rows’: [(‘Ed Jones’,), (‘Pete Jones’,), (‘Wendy Williams’,), (‘Mary Contrary’,), (‘Fred Smith’,)]}

  • SQLAlchemy RowProxy objects

    Casts the RowProxy cursor object into a dictionary, probably losing its ordered dictionary behavior in the process but making it JSON-friendly.

  • webob_dicts objects

    returns webob_dicts.mixed() dictionary, which is guaranteed to be JSON-friendly.