我正在为 sublime text 开发一个插件,但在处理 json 文件时遇到了一些问题。
这是json文件
{
"desktop":{
"name":"build",
"upload":{
"maximum":512,
},
"load":{
"core":"i7",
}
},
"table":{
"name":"clean",
"upload":{
"maximum":1024,
},
"load":{
"core":"i3",
}
}
}
这是我加载它的方式
with open(self.path, 'r') as f:
text = f.read()
datas = json.loads(text)
for data in datas:
print(data['desktop'])
输出告诉我这个错误
TypeError: string indices must be integers
但是当我尝试使用 data[0] 时,我从 json 文件中得到了一个字符。
我知道我在解析和编码方面做错了,但我不知道在哪里。我整天都在阅读这里以前的帖子,并试图找出正确的方法。
我会很感激任何帮助。
请您参考如下方法:
首先您需要了解这不是 JSON 数组。这是一个 json 对象 -
{
"desktop":{
"name":"build",
"upload":{
"maximum":512,
},
"load":{
"core":"i7",
}
},
"table":{
"name":"clean",
"upload":{
"maximum":1024,
},
"load":{
"core":"i3",
}
}
}
所以代码-
for data in datas:
print(data['desktop'])
不是遍历数组项,它实际上是遍历该对象 datas 的属性/属性。 所以这样做已经给了你项目 -
for data in datas:
print(datas[data])
但是如果你想操作并找到每个属性,你可以像这样检查 -
for data in datas:
print(data)
print(datas[data])
if data == 'desktop':
print('do somthing')
这是它的在线 View - https://repl.it/B61g
编辑
如果 datas 可以是数组或对象,你可以这样检查 -
if type(datas) is list:
# datas is list do whatever you like
else:
# datas is obj
