{ "metadata": { "name": "", "signature": "sha256:68800b9ba72b5644a7d8331304826312da1c49af0d911ce59d2db9da3d5727f7" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Parse JSON File\n", "\n", "- **Author:** [Chris Albon](http://www.chrisalbon.com/), [@ChrisAlbon](https://twitter.com/chrisalbon)\n", "- **Date:** -\n", "- **Repo:** [Python 3 code snippets for data science](https://github.com/chrisalbon/code_py)\n", "- **Note:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preliminaries" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import json\n", "import pandas as pd\n", "import requests" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 31 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Get data" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Pull down some simple json data\n", "r = requests.get('http://api.zippopotam.us/us/ma/belmont')\n", "\n", "# Convert it into a python object\n", "data = r.json()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 78 }, { "cell_type": "code", "collapsed": false, "input": [ "# View the data\n", "data" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 79, "text": [ "{'state abbreviation': 'MA',\n", " 'place name': 'Belmont',\n", " 'country abbreviation': 'US',\n", " 'state': 'Massachusetts',\n", " 'places': [{'longitude': '-71.4594',\n", " 'latitude': '42.4464',\n", " 'place name': 'Belmont',\n", " 'post code': '02178'},\n", " {'longitude': '-71.2044',\n", " 'latitude': '42.4128',\n", " 'place name': 'Belmont',\n", " 'post code': '02478'}],\n", " 'country': 'United States'}" ] } ], "prompt_number": 79 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Parse data" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# One level deep\n", "data['places']" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 80, "text": [ "[{'longitude': '-71.4594',\n", " 'latitude': '42.4464',\n", " 'place name': 'Belmont',\n", " 'post code': '02178'},\n", " {'longitude': '-71.2044',\n", " 'latitude': '42.4128',\n", " 'place name': 'Belmont',\n", " 'post code': '02478'}]" ] } ], "prompt_number": 80 }, { "cell_type": "code", "collapsed": false, "input": [ "# One level deep, second element\n", "data['places'][1]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 81, "text": [ "{'longitude': '-71.2044',\n", " 'latitude': '42.4128',\n", " 'place name': 'Belmont',\n", " 'post code': '02478'}" ] } ], "prompt_number": 81 }, { "cell_type": "code", "collapsed": false, "input": [ "# One level down, then second item, then it's longitude object\n", "data['places'][1]['longitude']" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 82, "text": [ "'-71.2044'" ] } ], "prompt_number": 82 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create a for loop to extract all lat/long coordinates" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# For each element, i, in data.places,\n", "for i in data['places']:\n", " # print the latitude element and the longitude element\n", " print(i['latitude'], i['longitude'])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "42.4464 -71.4594\n", "42.4128 -71.2044\n" ] } ], "prompt_number": 130 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Same as above, but as a function" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Create a function that\n", "def extract_latlong(json):\n", " # For each element, i, in data.places,\n", " for i in data['places']:\n", " # print the latitude element and the longitude element\n", " print(i['latitude'], i['longitude'])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 139 }, { "cell_type": "code", "collapsed": false, "input": [ "# Run the function\n", "extract_latlong(data)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "42.4464 -71.4594\n", "42.4128 -71.2044\n" ] } ], "prompt_number": 144 } ], "metadata": {} } ] }