How to convert api JSON output to a dataframe?

error2007s :

I am working on pulling weather data from NOAA API using a SDK. Below is the sample code:

import requests, json
import pandas as pd
from pandas.io.json import json_normalize

from noaa_sdk import noaa
n = noaa.NOAA()
n.points_forecast(40.7314, -73.8656, hourly=False)

The sample output is below:

{'@context':
['https://raw.githubusercontent.com/geojson/geojson-ld/master/contexts/geojson-base.jsonld',
{'wx': 'https://api.weather.gov/ontology#',    'geo':
'http://www.opengis.net/ont/geosparql#',    'unit':
'http://codes.wmo.int/common/unit/',    '@vocab':
'https://api.weather.gov/ontology#'}],  'type': 'Feature',
'geometry': {'type': 'GeometryCollection',   'geometries': [{'type':
'Point', 'coordinates': [-73.8610332, 40.7408918]},    {'type':
'Polygon',
    'coordinates': [[[-73.8730892, 40.7534295],
      [-73.8775823, 40.7317593],
      [-73.8489801, 40.7283524],
      [-73.84448110000001, 40.7500224],
      [-73.8730892, 40.7534295]]]}]},  'properties': {'updated': '2020-04-03T09:30:44+00:00',   'units': 'us',   'forecastGenerator':
'BaselineForecastGenerator',   'generatedAt':
'2020-04-03T14:18:55+00:00',   'updateTime':
'2020-04-03T09:30:44+00:00',   'validTimes':
'2020-04-03T03:00:00+00:00/P7DT4H',   'elevation': {'value': 14.9352,
'unitCode': 'unit:m'},   'periods': [{'number': 1,
    'name': 'Today',
    'startTime': '2020-04-03T10:00:00-04:00',
    'endTime': '2020-04-03T18:00:00-04:00',
    'isDaytime': True,
    'temperature': 53,
    'temperatureUnit': 'F',
    'temperatureTrend': 'falling',
    'windSpeed': '18 mph',
    'windDirection': 'N',
    'icon': 'https://api.weather.gov/icons/land/day/rain,50?size=medium',
    'shortForecast': 'Chance Light Rain',
    'detailedForecast': 'A chance of rain. Cloudy. High near 53, with temperatures falling to around 50 in the afternoon. North wind around
18 mph, with gusts as high as 29 mph. Chance of precipitation is
50%.'}

I need to convert above JSON output to a data frame so that I can export it as a CSV file. How to achieve that?

I need the dataframe to have the below columns

    'name': 'Today',
    'startTime': '2020-04-03T10:00:00-04:00',
    'endTime': '2020-04-03T18:00:00-04:00',
    'isDaytime': True,
    'temperature': 53,
    'temperatureUnit': 'F',
    'temperatureTrend': 'falling',
    'windSpeed': '18 mph',
    'windDirection': 'N',
    'icon': 'https://api.weather.gov/icons/land/day/rain,50?size=medium',
    'shortForecast': 'Chance Light Rain',
    'detailedForecast': 'A chance of rain. Cloudy. High near 53, with temperatures falling to around 50 in the afternoon. North wind around
18 mph, with gusts as high as 29 mph. Chance of precipitation is
50%.'
Serge Ballesta :

Ok, it is easier that we could have thought first. All the relevant fields are in the same dict in a list. This is a native entry for a DataFrame.

Assuming you have loaded the json in a data variable, you can just do:

df = pd.DataFrame(data['properties']['periods'],
          columns= ['name', 'startTime', 'endTime', 'isDaytime', 'temperature',
            'temperatureUnit', 'temperatureTrend', 'windSpeed', 'windDirection',
            'icon', 'shortForecast', 'detailedForecast'])

It will give:

    name                  startTime                    endTime  isDaytime  temperature temperatureUnit temperatureTrend windSpeed windDirection                                               icon      shortForecast                                   detailedForecast
0  Today  2020-04-03T10:00:00-04:00  2020-04-03T18:00:00-04:00       True           53               F          falling    18 mph             N  https://api.weather.gov/icons/land/day/rain,50...  Chance Light Rain  A chance of rain. Cloudy. High near 53, with t...

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=398414&siteId=1