web-dev-qa-db-ja.com

Pythonを使用してJSONネスト辞書を解析する

JSONに次のネストされた辞書があります。 「id」、「self」、「name」を取得したい場合、Python Program。

{
  "items": [
    {
      "id": "12345",
      "links": {
        "self": "https://www.google.com"
      },
      "name": "beast",
      "type": "Device"
    }
  ],
  "links": {
    "self": "https://www.google.com"
  },
  "paging": {
    "count": 1,
    "limit": 1,
    "offset": 0,
    "pages": 1
  }
}
8
I am L

Jsonの設定方法を理解するために、jsonを分解する方が簡単です。最初の辞書のキーを見て、値を削除してみましょう。

json = {"items": [], "links": {}}

2つのキーと2つの値を持つ辞書があります。探している3つの変数(id、self、name)はすべて、最初のキー「items」にあります。それでは、さらに詳しく見ていきましょう。

json["items"] = [{'links': {'self': 'https://www.google.com'}, 'name': 'beast', 'type': 'Device', 'id': '12345'}]

これで、探している値を持つ辞書を含むリストができたので、次の辞書を含むリストの最初で唯一の値を入力しましょう。

json["items"][0] = {'links': {'self': 'https://www.google.com'}, 'id': '12345', 'type': 'Device', 'name': 'beast'}

最後に、値が検索されている辞書があるので、このコードを使用して名前とIDを見つけることができます。

json["items"][0]["name"] = beast

json["items"][0]["id"] = 12345

自己変数は、1つの辞書の奥に隠されているため、リンクキーを詳しく調べる必要があります。

json["items"][0]["links"]["self"] = http://google.com

これですべての値が得られました。必要な値を取得するには、すべてのリストと辞書をたどる必要があります。

8
Aeolus

必要な値を取得する関数を作成できます。

def dict_get(x,key,here=None):
    x = x.copy()
    if here is None: here = []
    if x.get(key):  
        here.append(x.get(key))
        x.pop(key)
    else:
        for i,j in x.items():
          if  isinstance(x[i],list): dict_get(x[i][0],key,here)
          if  isinstance(x[i],dict): dict_get(x[i],key,here)
    return here

dict_get(a,'id')
 ['12345']

dict_get(a,'self')
 ['https://www.google.com', 'https://www.google.com']

dict_get(a,'name')
['beast']

必要な任意のキーを呼び出すこともできます。

データ

a = {
  "items": [
    {
      "id": "12345",
      "links": {
        "self": "https://www.google.com"
      },
      "name": "beast",
      "type": "Device"
    }
  ],
  "links": {
    "self": "https://www.google.com"
  },
  "paging": {
    "count": 1,
    "limit": 1,
    "offset": 0,
    "pages": 1
  }
}
0
Onyambu

あなたのjsonは基本的にその中にリストを含んでいます。 JSONはキーと値のペアとしてアクセスされ、リストはインデックスを使用してアクセスされます。

json_object['items'][0]['id']

上記の文はあなたにIDを与えるはずです。リストを含む主要なアイテムにアクセスしています。このリストには要素が1つだけ含まれているため、[0]があります(これもキーと値のペアです)。

自己と名前についても同じアプローチに従います

json_object['links']['self']
json_object['items'][0]['links']['self']
json_object['items'][0]['name']

2つの異なる 'self'へのアクセスの違いは、1つがリストに含まれているため、リストに入る必要があり、もう1つは、辞書 'links'内にあるキー 'self'を持つ辞書です。

0
Harikrishna

インデントされた辞書を記述して、その入れ子をよりよく表示するのに役立ちます。

mydict = {   
   'items': [
       {
           'id': '12345',
           'links': {'self': 'https://www.google.com'},
           'name': 'beast',
           'type': 'Device'
       }
    ],
    'links': {'self': 'https://www.google.com'},
    'paging': {
        'count': 1,
        'limit': 1,
        'offset': 0,
        'pages': 1
    }
}

これで、必要なものを抽出できます。

「id」、「self」、「name」を取得したい場合は、

print(mydict['items'][0]['id'])
print(mydict['items'][0]['links']['self'])
print(mydict['links']['self'])
print(mydict['items'][0]['name'])
0
nosklo