将JSON字符串转换为字典不是列表

law*_*hit 195 python json dictionary list python-3.x

我试图传入一个JSON文件并将数据转换为字典.

到目前为止,这就是我所做的:

import json
json1_file = open('json1')
json1_str = json1_file.read()
json1_data = json.loads(json1_str)
Run Code Online (Sandbox Code Playgroud)

我期待json1_data成为一种dict类型,但实际上它list在我检查时会作为一种类型出现type(json1_data).

我错过了什么?我需要这个是字典,所以我可以访问其中一个键.

Dao*_*Wen 253

你的JSON是一个内部有一个对象的数组,所以当你读到它时,你会得到一个里面有一个字典的列表.您可以通过访问列表中的项目0来访问您的字典,如下所示:

json1_data = json.loads(json1_str)[0]
Run Code Online (Sandbox Code Playgroud)

现在,您可以按照预期访问存储在数据点中的数据:

datapoints = json1_data['datapoints']
Run Code Online (Sandbox Code Playgroud)

如果有人能咬人,我还有一个问题:我试图获取这些数据点中第一个元素的平均值(即datapoints [0] [0]).为了列出它们,我尝试做数据点[0:5] [0],但我得到的是第一个带有两个元素的数据点,而不是想要获得仅包含第一个元素的前5个数据点.有没有办法做到这一点?

datapoints[0:5][0]没有做你期望的事.datapoints[0:5]返回一个仅包含前5个元素的新列表切片,然后[0]在其末尾添加将只获取该结果列表切片中的第一个元素.您需要使用什么来获得所需的结果是列表理解:

[p[0] for p in datapoints[0:5]]
Run Code Online (Sandbox Code Playgroud)

这是计算均值的简单方法:

sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
Run Code Online (Sandbox Code Playgroud)

如果你愿意安装NumPy,那就更容易了:

import numpy
json1_file = open('json1')
json1_str = json1_file.read()
json1_data = json.loads(json1_str)[0]
datapoints = numpy.array(json1_data['datapoints'])
avg = datapoints[0:5,0].mean()
# avg is now 35.8
Run Code Online (Sandbox Code Playgroud)

使用,具有NumPy数组的切片语法的运算符具有您最初期望的列表切片的行为.

  • @lawchit-请参阅我的最新答案。如果您要对这些数据进行数学运算,我强烈建议您使用NumPy。 (2认同)

use*_*754 13

这是一个简单的片段,它json从字典中读取文本文件中的内容.请注意,您的json文件必须遵循json标准,因此必须使用"双引号而不是'单引号.

你的JSON dump.txt文件:

{"test":"1", "test2":123}
Run Code Online (Sandbox Code Playgroud)

Python脚本:

import json
with open('/your/path/to/a/dict/dump.txt') as handle:
    dictdump = json.loads(handle.read())
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用以下内容:

import json

 with open('<yourFile>.json', 'r') as JSON:
       json_dict = json.load(JSON)

 # Now you can use it like dictionary
 # For example:

 print(json_dict["username"])
Run Code Online (Sandbox Code Playgroud)