【问题标题】:Access standalone values in json responses访问 json 响应中的独立值
【发布时间】:2021-04-19 13:23:18
【问题描述】:

作为对请求的响应,我有以下输出:

{
    [
        "1545904980",             //val1
        "0.058",                  //val2
        "0.049",                  //val3
        "0.058",                  //val4
        "0.049",                  //val5
        "0.018",                  //val6
        "0.000945"                //val7
    ],
    [
        "1545904920",
        "0.058",
        "0.072",
        "0.072",
        "0.058",
        "0.103",
        "0.006986"
    ]
}

假设我想访问 val3 并因此访问“0.049”,这就是我使用的:

    test = requests.get("url")

    # to load response into json we must convert response to string
    test_list = str(test.json())

    #before loading response into json we must convert '' string to "" type string.
    s_test = test_list.replace("\'", "\"")
    test_data = json.loads(s_test)
    
    for i in test_data:
        for j in i:
            print(i[2])
    pass

编辑:

每次我运行这段代码时,它都会运行但没有错误。我认为它直接转向“通过”。如果我只是使用,一切正常

    for i in test_data:
        print(i)

但这会打印出不是目标的整个 JSON 对象。有关如何访问这些特定值的任何帮助?

【问题讨论】:

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


    【解决方案1】:

    你很接近。我认为您正在寻找两个 for 循环尝试的混合体。

    import json
    
    s_test = '''
    [
        ["1545904980", "0.058", "0.049", "0.058", "0.049", "0.018", "0.000945"],
        ["1545904920", "0.058", "0.072", "0.072", "0.058", "0.103", "0.006986"]
    ]
    '''
    test_data = json.loads(s_test)
    
    for row in test_data:
        print(row[2])
    

    应该给你:

    0.049
    0.072
    

    【讨论】:

    • 感谢您的快速回复!我试过了,但它给了我单个字符而不是我期望的数据。我检查了对象的输出以确保除了这些数字之外没有其他数据,但没有找到任何数据。如果在原始响应中找不到这种类型的输出,为什么我会得到这种类型的输出?
    • 您能否验证该示例是否代表您的实际数据。我相当确定我发布的示例会产生给定的结果。
    • 我给出的数据是一个例子,但我测试的端点是不同的。这是我使用 "print(test_data[i]": [['1566788400', '0.00456', '0.0045713', '0.0045713', '0.00456', '18866.13656796', '86.157820374417214'], ['15660] 时的输出', '0.00456', '0.00456', '0.0045637', '0.0045599', '36199.78545767', '165.076784167255948']...] 请注意,响应正文仍有更多数据,但我将这些数据留给了 Visuality。
    • 如果您打印test_data[i],您可能会获得第 i 个元素的完整数组条目。你想仔细看看我的例子或@mathieu-troullier 的例子。
    【解决方案2】:

    你可以直接这样做:

    import requests
    
    response = requests.get("url")
    
    data = response.json()
    
    for row in data:
        print(row[2])
    

    【讨论】:

    • 我之前尝试过,但它给了我错误“KeyError:2”。我觉得这并不难,但我看不出我在哪里弄乱了代码..
    【解决方案3】:

    这是对我有用的解决方案:

    test = requests.get("url")
    test_data = test['data']
    
    
    for i in range(len(test_data)):
        for j in test_data[i]:
            if test_data[i]['dict_key'] == 'any_value':
                # do something here
            else:
                i = i + 1
    

    这会遍历字典列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      相关资源
      最近更新 更多