根据this Q&A,可以使用print data[u'X'][50][u'Z']
data[u'X']
导致:
{
"X" : [ {
"A" : "B",
...
}, {
...
}, {
"C" : "D",
} ]
}
应用整数方法意味着用逗号分隔的每个部分,例如"element" : [ { "name" : "value", ... },
需要计算,直到找到所需的部分,在这种情况下为50。
如果将来更改JSON结构会怎样?这是否意味着每次都应该更新整数?
在我看来,这种方法很脆弱。如何使其更可靠?
尝试
print data[u'X'][0]
导致:
{u'A': u'B', u'C': u'D'}
,而
print data[u'X'][u'A']
结果:
Traceback (most recent call last):
File "test.py", line 9, in <module>
print data[u'beans'][u'modelerType']
TypeError: list indices must be integers, not unicode
答案 0 :(得分:2)
JSON中有两种类型的集合,数组和对象(see the API for more info)
例如,项目列表:
x = ['a', 'b', 'c', 'd']
x[2] // Returns 'c'
一个对象:
x = {"a": 10, "b": 20, "c": 30}
x['b'] // Returns 20
因此,假设您使用对象来存储数据,而根本不需要索引号,只需要使用属性的名称。如果使用列表,则必须存储列表索引。
可以将数组存储在对象中,反之亦然。例如:
x = [1, 2, 3, {"a": 10, "b": 20, "c": [30, 40, 50]}]
x[0] // Returns 1
x[3] // Returns {"a": 10, "b": 20, "c": [30, 40, 50]}
x[3]['a'] // Returns 10
x[3]['c'][2] // Returns 50
答案 1 :(得分:0)
这可能更接近你正在寻找的东西:
models = ['JvmMetrics', 'MyMetrics']
filtered = filter(ldata['beans'], lambda x: x['modelerType'] in models)
除非你想从JMX响应中构建另一个dict,否则不太可能有更好的方法。