Skip to main content

A JSON flattening and dataframe generation tool.

Project description

Latest PyPI version Latest Travis CI build status

A JSON document flattening tool

$ jsonflatten --help

Usage: jsonflatten [OPTIONS] [JSONFILE]

  Specify which keys or whole document to flatten

Options:
  -f, --flatten TEXT    Flatten only those specified keys generated from
                        `jsoncut -l` option as a comma-separated list or
                        idividually, i.e.  `-f7,9` or `-f7 -f9`
  -n, --nocolor         Disable syntax highlighting
  -q, --quotechar TEXT  Quote character used in serialized data, defaults to
                        '"'
  -s, --slice           Disable sequencer
  --version             Show the version and exit.
  --help                Show this message and exit.

Installation

$ pip install jsonflatten

Usage

  • Python 3 support only; jsonflatten is not currently supported under Python 2.

  • jsonflatten is meant to be used alongside jsoncut.

  • Flatten the entire JSON document by not setting any command-line options.

  • Flatten specified keys in the JSON document using the -f option.

  • jsonflatten functions can also be imported into your own programs or scripts.

Sample Data

  • forecast.json - three day weather forecast API data

{
  "status":"200",
  "datetime": "2017-09-09 11:49",
  "request_type": "3-day Forecast",
  "list": [
    {
      "date": "2017-09-09",
      "sunrise": "07:04",
      "sunset": "19:31",
      "moonrise": "22:07",
      "moonset": "10:11",
      "temp_f_min": 81,
      "temp_f_max": 85,
      "day": {
        "humidity_pct": 82,
        "uv_index": 5,
        "weather": {
          "description": "Heavy Rain/Wind",
          "summary": "Tropical storm conditions likely. Rain showers will bring heavy downpours and strong gusty winds at times.",
          "icon":"04d"
        }, "wind": {
          "speed_ave_mph": 49,
          "speed_low_mph": 40,
          "speed_high_mph": 60,
          "direction": "ENE"
        }, "rain": {
          "precip_pct": 100,
          "low_inches": 1,
          "high_inches": 2
        }
      }, "night": {
        "humidity_pct": 82,
        "weather": {
          "description": "Heavy Rain/Wind",
          "summary": "Major hurricane conditions likely. Bands of heavy rain containing strong gusty winds at times.",
          "icon":"04d"
        }, "wind": {
          "speed_ave_mph": 120,
          "speed_low_mph": 115,
          "speed_mph": 130,
          "direction": "ENE"
        }, "rain": {
          "precip_pct": 100,
          "low_inches": 5,
          "high_inches": 8
        }
      }
    }, {
      "date": "2017-10-09",
      "sunrise": "07:04",
      "sunset": "19:30",
      "moonrise": "22:51",
      "moonset": "11:12",
      "temp_f_min": 79,
      "temp_f_max": 85,
      "day": {
        "humidity_pct": 84,
        "uv_index": 5,
        "weather": {
          "description": "Heavy Rain/Wind",
          "summary": "Major hurricane conditions likely. Bands of heavy rain containing strong gusty winds at times.",
          "icon":"04d"
        }, "wind": {
          "speed_ave_mph": 117,
          "speed_low_mph": 115,
          "speed_mph": 130,
          "direction": "SE"
        }, "rain": {
          "precip_pct": 100,
          "low_inches": 1,
          "high_inches": 2
        }
      }, "night": {
        "humidity_pct": 83,
        "weather": {
          "description": "Thunderstorms/Wind",
          "summary": "Tropical storm conditions likely.  Windy with bands of heavy rain showers and thunderstorms.",
          "icon":"04d"
        }, "wind": {
          "speed_ave_mph": 71,
          "speed_low_mph": 60,
          "speed_mph": 80,
          "direction": "SSW"
        }, "rain": {
          "precip_pct": 100,
          "low_inches": 1,
          "high_inches": 2
        }
      }
    }, {
      "date": "2017-11-09",
      "sunrise": "0705",
      "sunset": "1929",
      "moonrise": "2339",
      "moonset": "1213",
      "temp_f_min": 77,
      "temp_f_max": 90,
      "day": {
        "humidity_pct": 72,
        "uv_index": 9,
        "weather": {
          "description": "Partly Cloudy/Wind",
          "summary": "Windy. Mostly cloudy skies will become partly cloudy in the afternoon.",
          "icon":"03d"
        }, "wind": {
          "speed_ave_mph": 16,
          "speed_low_mph": 10,
          "speed_high_mph": 20,
          "direction": "WSW"
          }, "rain": {
          "precip_pct": 20,
          "low_inches": 1,
          "high_inches": 2
        }
      }, "night": {
        "humidity_pct": 82,
        "weather": {
          "description": "Partly cloudy",
          "summary": "A few clouds.",
          "icon":"04d"
        }, "wind": {
          "speed_ave_mph": 16,
          "speed_low_mph": 10,
          "speed_mph": 20,
          "direction": "WSW"
        }, "rain": {
          "precip_pct": 10,
          "low_inches": null,
          "high_inches": null
        }
      }
    }
  ], "city": {
    "id": 4164138,
    "name": "Miami",
    "coord": {
      "lat": 25.7743,
      "lon": -80.1937
    },
    "country": "US"
  }
}

Flatten Entire JSON Document

$ jsonflatten forecast.json
{
    "city.coord.lat": 25.7743,
    "city.coord.lon": -80.1937,
    "city.country": "US",
    "city.id": 4164138,
    "city.name": "Miami",
    "datetime": "2017-09-09 11:49",
    "list": [
        {
            "date": "2017-09-09",
            "day.humidity_pct": 82,
            "day.rain.high_inches": 2,
            "day.rain.low_inches": 1,
            "day.rain.precip_pct": 100,
            "day.uv_index": 5,
            "day.weather.description": "Heavy Rain/Wind",
            "day.weather.icon": "04d",
            "day.weather.summary": "Tropical storm conditions likely. Rain showers will bring heavy downpours and strong gusty winds at times.",
            "day.wind.direction": "ENE",
            "day.wind.speed_ave_mph": 49,
            "day.wind.speed_high_mph": 60,
            "day.wind.speed_low_mph": 40,
            "moonrise": "22:07",
            "moonset": "10:11",
            "night.humidity_pct": 82,
            "night.rain.high_inches": 8,
            "night.rain.low_inches": 5,
            "night.rain.precip_pct": 100,
            "night.weather.description": "Heavy Rain/Wind",
            "night.weather.icon": "04d",
            "night.weather.summary": "Major hurricane conditions likely. Bands of heavy rain containing strong gusty winds at times.",
            "night.wind.direction": "ENE",
            "night.wind.speed_ave_mph": 120,
            "night.wind.speed_low_mph": 115,
            "night.wind.speed_mph": 130,
            "sunrise": "07:04",
            "sunset": "19:31",
            "temp_f_max": 85,
            "temp_f_min": 81
        },
        {
            "date": "2017-10-09",
            "day.humidity_pct": 84,
            "day.rain.high_inches": 2,
            "day.rain.low_inches": 1,
            "day.rain.precip_pct": 100,
            "day.uv_index": 5,
            "day.weather.description": "Heavy Rain/Wind",
            "day.weather.icon": "04d",
            "day.weather.summary": "Major hurricane conditions likely. Bands of heavy rain containing strong gusty winds at times.",
            "day.wind.direction": "SE",
            "day.wind.speed_ave_mph": 117,
            "day.wind.speed_low_mph": 115,
            "day.wind.speed_mph": 130,
            "moonrise": "22:51",
            "moonset": "11:12",
            "night.humidity_pct": 83,
            "night.rain.high_inches": 2,
            "night.rain.low_inches": 1,
            "night.rain.precip_pct": 100,
            "night.weather.description": "Thunderstorms/Wind",
            "night.weather.icon": "04d",
            "night.weather.summary": "Tropical storm conditions likely.  Windy with bands of heavy rain showers and thunderstorms.",
            "night.wind.direction": "SSW",
            "night.wind.speed_ave_mph": 71,
            "night.wind.speed_low_mph": 60,
            "night.wind.speed_mph": 80,
            "sunrise": "07:04",
            "sunset": "19:30",
            "temp_f_max": 85,
            "temp_f_min": 79
        },
        {
            "date": "2017-11-09",
            "day.humidity_pct": 72,
            "day.rain.high_inches": 2,
            "day.rain.low_inches": 1,
            "day.rain.precip_pct": 20,
            "day.uv_index": 9,
            "day.weather.description": "Partly Cloudy/Wind",
            "day.weather.icon": "03d",
            "day.weather.summary": "Windy. Mostly cloudy skies will become partly cloudy in the afternoon.",
            "day.wind.direction": "WSW",
            "day.wind.speed_ave_mph": 16,
            "day.wind.speed_high_mph": 20,
            "day.wind.speed_low_mph": 10,
            "moonrise": "2339",
            "moonset": "1213",
            "night.humidity_pct": 82,
            "night.rain.high_inches": null,
            "night.rain.low_inches": null,
            "night.rain.precip_pct": 10,
            "night.weather.description": "Partly cloudy",
            "night.weather.icon": "04d",
            "night.weather.summary": "A few clouds.",
            "night.wind.direction": "WSW",
            "night.wind.speed_ave_mph": 16,
            "night.wind.speed_low_mph": 10,
            "night.wind.speed_mph": 20,
            "sunrise": "0705",
            "sunset": "1929",
            "temp_f_max": 90,
            "temp_f_min": 77
        }
    ],
    "request_type": "3-day Forecast",
    "status": "200"
}

Flatten Only Specific Keys

$ cat forecast.json | jsoncut -l
 1 city
 2 city.coord
 3 city.coord.lat
 4 city.coord.lon
 5 city.country
 6 city.id
 7 city.name
 8 datetime
 9 list
10 request_type
11 status
$ cat forecast.json | jsonflatten -f3,4,7
{
  "city.coord.lat": 25.7743,
  "city.coord.lon": -80.1937,
  "city.name": "Miami"
}
$ cat forecast.json | jsonflatten -f7 -f9
{
  "city.name": "Miami",
  "list": [
      {
          "date": "2017-09-09",
          "day.humidity_pct": 82,
          "day.rain.high_inches": 2,
          "day.rain.low_inches": 1,
          "day.rain.precip_pct": 100,
          "day.uv_index": 5,
          "day.weather.description": "Heavy Rain/Wind",
          "day.weather.icon": "04d",
          "day.weather.summary": "Tropical storm conditions likely. Rain showers will bring heavy downpours and strong gusty winds at times.",
          "day.wind.direction": "ENE",
          "day.wind.speed_ave_mph": 49,
          "day.wind.speed_high_mph": 60,
          "day.wind.speed_low_mph": 40,
          "moonrise": "22:07",
          "moonset": "10:11",
          "night.humidity_pct": 82,
          "night.rain.high_inches": 8,
          "night.rain.low_inches": 5,
          "night.rain.precip_pct": 100,
          "night.weather.description": "Heavy Rain/Wind",
          "night.weather.icon": "04d",
          "night.weather.summary": "Major hurricane conditions likely. Bands of heavy rain containing strong gusty winds at times.",
          "night.wind.direction": "ENE",
          "night.wind.speed_ave_mph": 120,
          "night.wind.speed_low_mph": 115,
          "night.wind.speed_mph": 130,
          "sunrise": "07:04",
          "sunset": "19:31",
          "temp_f_max": 85,
          "temp_f_min": 81
      },
      {
          "date": "2017-10-09",
          "day.humidity_pct": 84,
          "day.rain.high_inches": 2,
          "day.rain.low_inches": 1,
          "day.rain.precip_pct": 100,
          "day.uv_index": 5,
          "day.weather.description": "Heavy Rain/Wind",
          "day.weather.icon": "04d",
          "day.weather.summary": "Major hurricane conditions likely. Bands of heavy rain containing strong gusty winds at times.",
          "day.wind.direction": "SE",
          "day.wind.speed_ave_mph": 117,
          "day.wind.speed_low_mph": 115,
          "day.wind.speed_mph": 130,
          "moonrise": "22:51",
          "moonset": "11:12",
          "night.humidity_pct": 83,
          "night.rain.high_inches": 2,
          "night.rain.low_inches": 1,
          "night.rain.precip_pct": 100,
          "night.weather.description": "Thunderstorms/Wind",
          "night.weather.icon": "04d",
          "night.weather.summary": "Tropical storm conditions likely.  Windy with bands of heavy rain showers and thunderstorms.",
          "night.wind.direction": "SSW",
          "night.wind.speed_ave_mph": 71,
          "night.wind.speed_low_mph": 60,
          "night.wind.speed_mph": 80,
          "sunrise": "07:04",
          "sunset": "19:30",
          "temp_f_max": 85,
          "temp_f_min": 79
      },
      {
          "date": "2017-11-09",
          "day.humidity_pct": 72,
          "day.rain.high_inches": 2,
          "day.rain.low_inches": 1,
          "day.rain.precip_pct": 20,
          "day.uv_index": 9,
          "day.weather.description": "Partly Cloudy/Wind",
          "day.weather.icon": "03d",
          "day.weather.summary": "Windy. Mostly cloudy skies will become partly cloudy in the afternoon.",
          "day.wind.direction": "WSW",
          "day.wind.speed_ave_mph": 16,
          "day.wind.speed_high_mph": 20,
          "day.wind.speed_low_mph": 10,
          "moonrise": "2339",
          "moonset": "1213",
          "night.humidity_pct": 82,
          "night.rain.high_inches": null,
          "night.rain.low_inches": null,
          "night.rain.precip_pct": 10,
          "night.weather.description": "Partly cloudy",
          "night.weather.icon": "04d",
          "night.weather.summary": "A few clouds.",
          "night.wind.direction": "WSW",
          "night.wind.speed_ave_mph": 16,
          "night.wind.speed_low_mph": 10,
          "night.wind.speed_mph": 20,
          "sunrise": "0705",
          "sunset": "1929",
          "temp_f_max": 90,
          "temp_f_min": 77
      }
  ]
}

Authors

jsonflatten was written by Tim Phillips.

Credits

Brian Peterson bpeterso2000, creator of JSON Transformations https://github.com/json-transformations

Project details


Release history Release notifications | RSS feed

This version

0.2

Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

jsonflatten-0.2-py2.py3-none-any.whl (10.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file jsonflatten-0.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for jsonflatten-0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 7c3d4e17415cf79e5954ab2f85a5a9646d43df27d4d3cedaa1a60c5ae25a78db
MD5 68bec43caec9bf0e1079316838058b1d
BLAKE2b-256 536a1c53d924792e40617460935b4d7a1a094438c1f46aba9639dc9a6e0ceaee

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