【问题标题】:How can I pull nested JSON values from python using dictionaries?如何使用字典从 python 中提取嵌套的 JSON 值?
【发布时间】:2017-03-29 13:48:54
【问题描述】:

我的数据库格式如下:

{
  "latitude" : 41.884629,
  "longitude" : -87.648764,
  "name" : "Bar Siena",
  "placeID" : "ChIJf3h_t9osDogReehZO7Hgk50",
  "vibes" : {
    "LGpswrvLgfYppcBG4bpmNzXQVoU2" : {
      "rating" : 1,
      "timestamp" : 1.477961061358844E9
    },
    "OSzA2KhTBWS3pxVnCZ6eScAuNDG3" : {
      "rating" : 5,
      "timestamp" : 1.477955566836665E9
    }
  }
}

我想在 vibes 表中提取每个条的名称以及与其对应的每个评级。我的代码如下所示:

firebase = pyrebase.initialize_app(config)

db = firebase.database()
for i in range(1,100):
    venues = db.child("venues").child(i).get()
    dict = (venues.val())
    print(dict['name'])

到目前为止,我只能获得名称,但我不确定如何更深入并获得收视率。我的数据库是使用 Firebase 管理的,我正在使用一个名为 Pyrebase 的 python 库,它只是 javascript api 的包装器。我遇到了麻烦,因为每个氛围都有一个生成的哈希键,所以我不确定如何更深入。有什么想法吗?

【问题讨论】:

  • 你能显示你想要得到的输出的格式吗?

标签: javascript python json firebase firebase-realtime-database


【解决方案1】:

vibes 可能以字典的形式出现。你想要的是每个哈希键的评级,所以你可以做类似的事情

for hashkey, vibe_dict in dict['vibes'].items(): # dict is a Python keyword, so it's a bad choice for a variable!
    print(hashkey, vibe_dict['rating'])

【讨论】:

  • 这是我最终使用的并且它有效,没有意识到python会自动映射密钥。谢谢!
  • @AmeerAkashe 很高兴我能帮上忙!如果可能,请将答案标记为已选择,以便您问题的未来查看者知道它已解决:)
【解决方案2】:

我不确定firebase,但在普通 python 中你可能会这样做:

>>> for vibe in my_json['vibes'].values():
...     print vibe['rating']
...
1  # Rating of item 1
5  # Rating of item 2

my_json 是从您的 json 构建的 dict

{
   "latitude":41.884629,
   "longitude":-87.648764,
   "name":"Bar Siena",
   "placeID":"ChIJf3h_t9osDogReehZO7Hgk50",
   "vibes":{
      "LGpswrvLgfYppcBG4bpmNzXQVoU2":{
         "rating":1,
         "timestamp":1.477961061358844E9
      },
      "OSzA2KhTBWS3pxVnCZ6eScAuNDG3":{
         "rating":5,
         "timestamp":1.477955566836665E9
      }
   }
}

【讨论】:

    【解决方案3】:

    如果您的 venues 变量是类似 JSON 的对象,例如示例,您可以使用标准的 json 库来处理它:

    import json
    dict_data = json.loads(venues)
    print dict_data['latitude']
    

    顺便说一句,这是一种糟糕的开发风格 - 覆盖内置的 Python 函数。在您的示例中,您正在覆盖 dict(dict 是默认的 Python 类型对象)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2013-08-09
      • 2021-06-02
      相关资源
      最近更新 更多