簡體   English   中英

使用Python獲取特定JSON值的更可靠方法

[英]More reliable method to get specific JSON value using Python

根據此問答,可以使用print data[u'X'][50][u'Z']找到某個JSON值

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

JSON中有2種類型的集合,數組和對象(有關更多信息,請參閱API)

例如,項目列表:

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

這可能更接近您要查找的內容:

models = ['JvmMetrics', 'MyMetrics']
filtered = filter(ldata['beans'], lambda x: x['modelerType'] in models)

除非您想根據JMX響應構建另一個指令,否則不可能有更好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM