Python-标准化嵌套的json文件

时间:2019-11-21 21:04:09

标签: python json python-jsons

我已经嵌套了json文件,我正在尝试将数据放入数据框。我必须提取传感器时间,然后提取元素,最后提取传感器信息。 json文件的外观如下:

{
    "sensor-time": {
        "timezone": "America/Los_Angeles",
        "time": "2019-11-21T01:00:04-08:00"
    },
    "status": {
        "code": "OK"
    },
    "content": {
        "element": [{
                "element-id": 0,
                "element-name": "Line 0",
                "sensor-type": "SINGLE_SENSOR",
                "data-type": "LINE",
                "from": "2019-11-21T00:00:00-08:00",
                "to": "2019-11-21T01:00:00-08:00",
                "resolution": "ONE_HOUR",
                "measurement": [{
                        "from": "2019-11-21T00:00:00-08:00",
                        "to": "2019-11-21T01:00:00-08:00",
                        "value": [{
                                "value": 0,
                                "label": "fw"
                            }, {
                                "value": 0,
                                "label": "bw"
                            }
                        ]
                    }
                ]
            }
        ]
    },
    "sensor-info": {
        "serial-number": "D8:80:39:D9:6B:9B",
        "ip-address": "192.168.0.3",
        "name": "XD01",
        "group": "Boost Mobile",
        "device-type": "PC2"
    }
}

这是到目前为止的代码:

import json
from pandas.io.json import json_normalize
import glob
import urllib
import sqlalchemy as sa
# Create empty dataframe
# Drill through each file with json extension in the folder, open it, load it and parse it into dataframe
file = 'C:/Test/Loading/testfile.json'
with open(file) as json_file:
    json_data = json.load(json_file)
    df = json_normalize(json_data, meta=['sensor-time'])
df

这是我运行代码时的输出:

enter image description here

我尝试使用flatten_json库,并且我能得到的最好的是此代码:

with open(file) as json_file:
json_data = json.load(json_file)
flat = flatten_json(json_data)
df = json_normalize(flat)

我得到一行33列的输出。因此,在我的情况下,由于我在json文件的Measurements部分下有多个值,因此我得到了每个度量值的列。我所要获得的是3行24列。每次测量一行。 那我现在如何修改呢?

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是使用pandas.DataFrame(json_data);那么您可以通过以下方式访问这些信息:

  • pandas.DataFrame(json_data)['sensor-time'] ['time']
  • pandas.DataFrame(json_data)['content'] ['element]
  • pandas.DataFrame(json_data)['content'] ['element]