【问题标题】:JSON navigation in Python (PowerBI API)Python 中的 JSON 导航(PowerBI API)
【发布时间】:2019-07-17 04:07:06
【问题描述】:

我正在尝试学习 python,并希望使用它与 PowerBI API 进行交互,特别是检查数据集的当前参数:

getParametersInGroup API

我创建了一个函数,可以成功返回我需要的数据,但我想过滤它,它有点超出我的能力..

    def check_dataset_parameter(access_token, parameter_name = "FarmId"):
    url = "https://api.powerbi.com/v1.0/myorg/groups/" + group_id + "/datasets/" + dataset_id + "/parameters"
    headers = {
        'content-type': "application/json",
        'authorization': "Bearer " + access_token,
    }
    response = requests.request("GET", url, data=None, headers=headers)
    response_full_json = response.json()
    response_value_str = str(response.json()['value'])
    parameter_list_clean = response_value_str.replace("'", '"').replace('[', '').replace(']', '').replace(' ', '')
    actual_value_i_want = response.json()['value'][0]['currentValue']
    current_value = actual_value_i_want ###Except I want the current value of the parameter specified in the function call
    return current_value

此代码返回“179”,因为它是位置 0 处的 currentValue。我想要返回函数调用中指定的参数(FarmId 或 OrgId)的当前值。

parameter_list_clean 的输出是:

{"name":"FarmId","type":"Text","isRequired":True,"currentValue":"179"},{"name":"OrgId","type":"Number","isRequired":True,"currentValue":"-1"}

我这样做是为了尝试将字符串转换为字典,但失败了,我还尝试了各种形式的 json.loads 和 json.dumps。

response_full_json 的原始输出如下所示:

{'@odata.context': 'http://wabi-australia-southeast-redirect.analysis.windows.net/v1.0/myorg/groups/<my_group>/$metadata#parameters', 'value': [{'name': 'FarmId', 'type': 'Text', 'isRequired': True, 'currentValue': '179'}, {'name': 'OrgId', 'type': 'Number', 'isRequired': True, 'currentValue': '-1'}]}

【问题讨论】:

    标签: python json python-3.x api powerbi


    【解决方案1】:

    我找到了答案。问题是 response.json()['value'] 返回的数据实际上是一个包含两个(或更多)字典的列表。我设法使用 next() 隔离了所需的单个字典:

        def check_dataset_parameter(access_token, parameter_name="FarmId"):
        url = "https://api.powerbi.com/v1.0/myorg/groups/" + group_id + "/datasets/" + dataset_id + "/parameters"
        headers = {
            'content-type': "application/json",
            'authorization': "Bearer " + access_token,
        }
        response = requests.request("GET", url, data=None, headers=headers)
        response_value = response.json()['value']
        parameter_dict = next((item for item in response_value if item["name"] == parameter_name), None)
        current_value = parameter_dict['currentValue']
        return current_value
    

    我发现这个问题非常有帮助: Python list of dictionaries search

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 2019-04-02
      • 1970-01-01
      • 2020-12-18
      相关资源
      最近更新 更多