Python 搜索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)

我试图创建一个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):
        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]}
是无效语法