Custom json serializers for the Starlette web framework.
Project description
Starlette Json
Introduction
Starlette json responses for various json serializers available in the python community.
Why:
- Remove
ujson
dependency from core starlette package - Add adaptors for other serializers
- Customize serializer rendering settings
Requirements
- Python 3.6+
- Starlette
Installation
$ pip install starlette-json
Optional installs
Install at least one of these:
- orjson
pip install orjson
- Ultrajson
pip install ujson
- Rapidjson
pip install python-rapidjson
- SimpleJson
pip install simplejson
Usage
Response examples
from starlette.applications import Starlette from starlette.responses import JSONResponse from starlette_json import ORJsonResponse, UJsonResponse, RapidJsonResponse, SimpleJsonResponse app = Starlette() data = {'Hello': 'World'} @app.route('/json') def json(request): return JSONResponse(data) @app.route('/orjson') def orjson(request): return ORJsonResponse(data) @app.route('/ujson') def ujson(request): return UJsonResponse(data) @app.route('/rapidjson') def rapidjson(request): return RapidJsonResponse(data) @app.route('/simplejson') def rapidjson(request): return SimpleJsonResponse(data)
Custom response rendering options:
See the docs for the specific json serializer for available options
from starlette.applications import Starlette from starlette_json import ORJsonResponse, UJsonResponse, RapidJsonResponse import orjson app = Starlette() data = {'Hello': 'World'} @app.route('/orjson') def orjson(request): return ORJsonResponse( data, default=lambda x: str(x), option=orjson.OPT_STRICT_INTEGER | orjson.OPT_NAIVE_UTC ) @app.route('/ujson') def ujson(request): return UJsonResponse( data, encode_html_chars=True, ensure_ascii=False, escape_forward_slashes=False ) @app.route('/rapidjson') def rapidjson(request): return RapidJsonResponse(data, sort_keys=True, indent=4) @app.route('/simplejson') def rapidjson(request): return SimpleJsonResponse( data, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True )
Json request body parsing:
from starlette.applications import Starlette from starlette_json import ORJsonMiddleware, ORJsonResponse app = Starlette() app.add_middleware(ORJsonMiddleware) @app.route('/orjson') def orjson(request): body = await request.json() # Parsed with orjson return ORJsonResponse({'message':'ok'})
Contributing
PRs very welcome. CONTRIBUTING.md
Todo
- Tests?
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
starlette_json-20.9.18.tar.gz
(4.3 kB
view hashes)
Built Distribution
Close
Hashes for starlette_json-20.9.18-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | abe3f56e7d4a6ef454e5f8913098c8988d6aa0af0f9484e7b86f6ad446f75bb0 |
|
MD5 | b23bfd0e0fb3d1034b7796e9d02e5245 |
|
BLAKE2-256 | 6cbce261c6ef83ef19220568678dfd6a5ca7fe969dcdf22601fd73e84f8a95ed |