Skip to main content

Tool to flatten stream of JSON-like objects, configured via schema

Project description

https://img.shields.io/travis/scrapinghub/flatson.svg https://img.shields.io/pypi/v/flatson.svg

A tool to flatten JSON-like objects, allowing to configure via an annotated JSON schema

Features

  • Flattens Python dictionaries using a JSON schema

  • Supports per-field configuration via the schema

Usage:

>>> from flatson import Flatson
>>> schema = {
        "$schema": "http://json-schema.org/draft-04/schema",
        "type": "object",
        "properties": {
            "name": {"type": "string"},
            "age": {"type": "number"},
            "address": {
                "type": "object",
                "properties": {"city": {"type": "string"}, "street": {"type": "string"}}
            },
            "skills": {"type": "array", "items": {"type": "string"}}
        }
    }
>>> sample = {
            "name": "Claudio", "age": 42,
            "address": {"city": "Paris", "street": "Rue de Sevres"},
            "skills": ["hacking", "soccer"]}
>>> f = Flatson(schema)
>>> f.fieldnames
['address.city', 'address.street', 'age', 'name', 'skills']
>>> f.flatten(sample)
['Paris', 'Rue de Sevres', 42, 'Claudio', '["hacking","soccer"]']

You can get a dict with the field names order preserved:

>>> f.flatten_dict(sample)
OrderedDict([('address.city', 'Paris'), ('address.street', 'Rue de Sevres'), ('age', 42), ('name', 'Claudio'), ('skills', '["hacking","soccer"]')])

You can also configure array serialization behavior through the schema (default JSON):

>>> schema = {
        "$schema": "http://json-schema.org/draft-04/schema",
        "type": "object",
        "properties": {
            "name": {"type": "string"},
            "skills": {
                "type": "array",
                "items": {"type": "string"},
                "flatson_serialize": {"method": "join_values"},
            }
        }
    }
>>> f = Flatson(schema)
>>> f.flatten({"name": "Salazar", "skills": ["hacking", "socker", "partying"]})
['Salazar', 'hacking,socker,partying']

History

0.1.0 (2015-06-02)

  • First release on PyPI.

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

flatson-0.1.0.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

flatson-0.1.0-py2.py3-none-any.whl (5.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file flatson-0.1.0.tar.gz.

File metadata

  • Download URL: flatson-0.1.0.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for flatson-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3e63836d7b7f403ef56f43e62478bf322c77e9510a82a6c878e43c11b163cb8a
MD5 5a9e6a2ffb3e964419fcbcc49636333b
BLAKE2b-256 2dad1448b5223740acbe699a2d9740c94cd95fbee69593b4d65a49663cfe7ce5

See more details on using hashes here.

File details

Details for the file flatson-0.1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for flatson-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 561d8401cff143e4977f02bc2812d890e88aec99c4651eac63da69af1ef07b45
MD5 5f16b2107aef81b2e401f416814e13f6
BLAKE2b-256 29655797c3cd3ab571c889817d28cb11c4c5ba739f7c1c0e46c9d710943bd87a

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