【问题标题】:Navigate in JSON with nultiple keys使用多个键在 JSON 中导航
【发布时间】:2023-01-25 02:44:00
【问题描述】:

我正在尝试使用以下代码从网站的 JSON 获取密钥:

import json
import requests
from bs4 import BeautifulSoup

url = input('Enter url:')
html = requests.get(url)
soup = BeautifulSoup(html.text,'html.parser')

data = json.loads(soup.find('script', type='application/json').text)
print(data)
print("####################################")

这是JSON

{"props": {
    "XYZ": {
        "ABC": [
            {
                "current": "sold",
                 "location": "FD",
                 "type": "d",
                 "uid": "01020633"
            }
        ],
        "searchTerm": "asd"
    }
}}

我能够加载页面,找到JSON,并打印所有数据。问题是,我怎样才能只打印来自 current 键的信息?像下面这样的东西会起作用吗?

print(data['props']['XYZ']['ABC']['current']

【问题讨论】:

  • current_value = data['props']['XYZ']['ABC'][0]['current']
  • @newbie,将其添加为答案并解释 OP ABC key 包含一个列表,因此需要使用索引访问它。

标签: python json python-3.x beautifulsoup python-requests


【解决方案1】:

正如其他答案已经解释的那样,您需要在 ['ABC']['current'] 之间添加 [0] 因为对应于 "ABC" 键的值是一个列表,其中包含带有 "current" 键的字典,因此您可以访问它

data["props"]["XYZ"]["ABC"][0]["current"]

另外,如果你有一个非常复杂和嵌套的数据结构并且你想快速你可以使用this set of functions

getNestedVal(data, 'current')

打印sold,以及

getNestedVal(data, 'current', 'just_expr', objName='data')

打印 data["props"]["XYZ"]["ABC"][0]["current"] 以便您可以从终端复制它并在您的代码中使用。 (除了弄清楚数据结构外,使用它并不是最好的主意,因为它会占用相当多的时间和内存。)

【讨论】:

    【解决方案2】:

    您可以像下面这样访问电流:

    data["props"]["XYZ"]["ABC"][0]["current"]
    

    您可以通过访问“ABC”键的值来获取字典列表。 因此,每当你得到花括号 {} 时,它表明它是一个字典,你可以使用访问特定键的值 dict[key] or dict.get(key,default_value) 每当你得到方括号 [] 时,它表明它是列表,你可以通过索引 list[0],list[1] 访问它的元素。

    因此,访问列表元素和字典键的值是两件不同的事情。我希望你明白我的意思。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多