Python 需要将JSON sting加载到DataFrame中

Python 需要将JSON sting加载到DataFrame中,python,json,python-3.x,Python,Json,Python 3.x,我有一个JSON字符串,如下所示: b'[{"status_verify":"0","dejatime_firstpaint":"0","fullip":"104.25.229.34","ctl_devlog":"69-131041194","resptime_fullpage":"0","dt_status":"2018-11-25 00:00:21","notified":"0","resptime_connect":"0.08799999952316284","http_resp_leng

我有一个JSON字符串,如下所示:

b'[{"status_verify":"0","dejatime_firstpaint":"0","fullip":"104.25.229.34","ctl_devlog":"69-131041194","resptime_fullpage":"0","dt_status":"2018-11-25 00:00:21","notified":"0","resptime_connect":"0.08799999952316284","http_resp_length":"0","resptime_firstbyte":"0.6819999814033508","obj_location":"31","max_fullpage_status":"-1","resptime_dns":"0","dejatime_pageload":"0","status":"0","resptime_redirect":"0","capture_exists":"0","resptime_content":"0.08799999952316284","rs_has_dejatime":"0","obj_cust":"117396","obj_device":"470630","childnodes":"0","deja_branched":"0","http_status":"HTTP 200 OK","info_msg":null,"device_descrip":"Get Public Datasets","dejatime_domload":"0","user_experience":"0","location_descrip":"San Francisco, California","dejatime_afttime":"0","resptime":"0.8579999804496765","obj_devlog":"152050515","test_cnt":"0","status_warning":"0"},{"status_verify":"0"

etc, etc, etc.
我试图挑选一些字段,并将它们加载到数据帧中,或者只是将所有内容加载到数据帧中。问题是,这些都是嵌套的,我不知道如何从这个庞大的字符串中获得实际的字段名

我试过这个:

loaded_json = json.loads(json_data)
for x in loaded_json:
    print("%s: %d" % (x, loaded_json[x]))

并得到以下结果:
TypeError:列表索引必须是整数或切片,而不是dict
。我猜这应该很简单,但我不确定如何继续,即使在谷歌搜索了一段时间寻找解决方案。

这是因为您的顶部元素是一个列表,您需要从列表中读取,而不是从dict中读取

import json

x = b'[{"status_verify":"0","dejatime_firstpaint":"0","fullip":"104.25.229.34","ctl_devlog":"69-131041194","resptime_fullpage":"0","dt_status":"2018-11-25 00:00:21","notified":"0","resptime_connect":"0.08799999952316284","http_resp_length":"0","resptime_firstbyte":"0.6819999814033508","obj_location":"31","max_fullpage_status":"-1","resptime_dns":"0","dejatime_pageload":"0","status":"0","resptime_redirect":"0","capture_exists":"0","resptime_content":"0.08799999952316284","rs_has_dejatime":"0","obj_cust":"117396","obj_device":"470630","childnodes":"0","deja_branched":"0","http_status":"HTTP 200 OK","info_msg":null,"device_descrip":"Get Public Datasets","dejatime_domload":"0","user_experience":"0","location_descrip":"San Francisco, California","dejatime_afttime":"0","resptime":"0.8579999804496765","obj_devlog":"152050515","test_cnt":"0","status_warning":"0"}]'


y = json.loads(x)
print(y[0]['status_verify'])

# output,
0

这是因为您的顶部元素是一个列表,您需要从列表中读取,而不是从dict中读取

import json

x = b'[{"status_verify":"0","dejatime_firstpaint":"0","fullip":"104.25.229.34","ctl_devlog":"69-131041194","resptime_fullpage":"0","dt_status":"2018-11-25 00:00:21","notified":"0","resptime_connect":"0.08799999952316284","http_resp_length":"0","resptime_firstbyte":"0.6819999814033508","obj_location":"31","max_fullpage_status":"-1","resptime_dns":"0","dejatime_pageload":"0","status":"0","resptime_redirect":"0","capture_exists":"0","resptime_content":"0.08799999952316284","rs_has_dejatime":"0","obj_cust":"117396","obj_device":"470630","childnodes":"0","deja_branched":"0","http_status":"HTTP 200 OK","info_msg":null,"device_descrip":"Get Public Datasets","dejatime_domload":"0","user_experience":"0","location_descrip":"San Francisco, California","dejatime_afttime":"0","resptime":"0.8579999804496765","obj_devlog":"152050515","test_cnt":"0","status_warning":"0"}]'


y = json.loads(x)
print(y[0]['status_verify'])

# output,
0

加载数据然后在数据框中放置一些字段的单行应该是:

df = pd.DataFrame(json.loads(x), columns=['status_verify', 'fullip', 'ctl_devlog'])

祝你的项目好运

一行加载数据,然后在数据框中放入一些字段,应该是这样的:

df = pd.DataFrame(json.loads(x), columns=['status_verify', 'fullip', 'ctl_devlog'])

祝你的项目好运

这是因为您的根元素是
列表
而不是
dict
,您希望从JSON字符串中读取什么内容?这是因为您的根元素是
列表
而不是
dict
,您希望从JSON字符串中读取什么内容?谢谢Sufiyan Ghori!!我想这样就可以了。我刚刚将代码改为:y=json.loads(json_data)for p in y:print(p['status\u verify'])print(p['fullip'])print(p['ctl\u devlog'])是否有将这3项从列表加载到数据框的最佳实践?谢谢Sufiyan Ghori!!我想这样就可以了。我刚刚将代码改为:y=json.loads(json_data)for p in y:print(p['status\u verify'])print(p['fullip'])print(p['ctl\u devlog'])是否有将这3项从列表加载到数据框的最佳实践?