Python 搜索json对象中的键
我试图创建一个area类,它将键“area”的所有实例汇总成json字符串 例如Python 搜索json对象中的键,python,json,Python,Json,我试图创建一个area类,它将键“area”的所有实例汇总成json字符串 例如e=Area('[1,2,3,{“Area”:123,“weight”:1000}])应该返回e=123,而这个区域('[“Hello”,“World”,“Area:999},{“Area”:1}])应该返回1000 目前,我每次都返回0,我认为这可能是因为我初始化sum太早,或者是因为我对字符串的索引可能已关闭 import json class Area: def __init__(self, txt)
e=Area('[1,2,3,{“Area”:123,“weight”:1000}])
应该返回e=123
,而这个区域('[“Hello”,“World”,“Area:999},{“Area”:1}])
应该返回1000
目前,我每次都返回0,我认为这可能是因为我初始化sum
太早,或者是因为我对字符串的索引可能已关闭
import json
class Area:
def __init__(self, txt):
self.txt=txt
def __str__(self):
sum=0
for a in self.txt:
if a == 'area':
sum+=int(self.txt[a]})
return str(sum)
这很有效
然后,您应该测试列表中的每个元素,看看它是否包含一个项目区域
,您应该记住,列表中的并非所有项目都支持in
操作符,因此将其包装在异常块中
最后,您在\uuu str\uuu
方法中执行所有这些操作似乎有些奇怪。最好有一个返回
import json
class Area:
def __init__(self, txt):
self.txt = json.loads(txt)
def __str__(self):
sum = 0
for a in self.txt:
try:
if 'area' in a:
sum += int(a['area'])
except TypeError:
pass
return str(sum)
print Area('[1, 2, 3, {"area": 123, "weight": 1000}]')
print Area('["Hello", "World", {"area": 999}, {"area": 1}]')
使用
json.loads
是可以的,但是您需要确保您有一个可以使用的dict,您可以使用内置函数来进行求和
import json
class Area:
def __init__(self, txt):
self.txt = txt
def __str__(self):
return str(sum(d.get("area", 0) for d in json.loads(self.txt)
if isinstance(d, dict)))
输出:
In [8]: e = Area('[1, 2, 3, {"area": 123, "weight": 1000}]')
In [9]: print e
123
In [10]: e = Area('["Hello", "World", {"area": 999}, {"area": 1}]')
In [11]: print e
1000
在您自己的代码中,您正在迭代字符串中的字符,因为您从未调用loads
,因此如果a=='area':
将永远不会为真,因为您将“area”与每个字符进行比较,因为您的代码也会出错,因为self.txt[a]}
是无效语法