ActiveCollab REST API 使用 Python 接收的嵌套 JSON 中的访问值 [已解决]

Posted

技术标签:

【中文标题】ActiveCollab REST API 使用 Python 接收的嵌套 JSON 中的访问值 [已解决]【英文标题】:Access value in nested JSON recieved by ActiveCollab REST API using Python [Solved] 【发布时间】:2021-11-09 18:00:22 【问题描述】:

我通过 REST-API 表单 ActiveCollab 得到了这个:


"time_records": [
        
            "id": 122,
            "class": "TimeRecord",
            "url_path": "\/projects\/89\/time-records\/122",
            "is_trashed": false,
            "trashed_on": null,
            "trashed_by_id": 0,
            "billable_status": 1,
            "value": 1.0,
            "record_date": 1645847200,
            "summary": "example",
            "user_id": 12365,
            "user_name": "Fred Coal",
            "user_email": "fredc@example.com",
            "parent_type": "Project",
            "parent_id": 89,
            "created_on": 1628497959,
            "created_by_id": 17,
            "created_by_name": "Fred Coal",
            "created_by_email": "fredc@example.com",
            "updated_on": 1635784512,
            "updated_by_id": 17,
            "job_type_id": 1,
            "source": "unknown",
            "original_is_trashed": false
        ,       
    ],

我想得到“价值”的价值。

但我不知道如何访问此属性。

我为此使用 Python。

import requests
import json
startdate = "2021-08-01"
enddate = "2021-08-31"
fromto = "?from="+startdate+"&to="+enddate
#-------------- 
def ac_rq(endpoint):
    token ='*'
    url = "https://*/api/v1/"+endpoint
    resp = dict(requests.get(url, headers='X-Angie-AuthApiToken': token))
    print(resp)
    return resp
#--------------
a = ac_rq('projects/129/time-records/filtered-by-date'+str(fromto))
b = json.loads(a.text)
for i in b:
    print(i['time_records'][0]['value'])

input("press enter to exit")

我收到此错误:

TypeError:字符串索引必须是整数

【问题讨论】:

response['time_records'][0]['value'] 【参考方案1】:

见下文(将 json 字符串加载到 dict 并引用请求的条目)

import json
data = '''
"time_records": [
        
            "id": 122,
            "class": "TimeRecord",
            "url_path": "\/projects\/89\/time-records\/122",
            "is_trashed": false,
            "trashed_on": null,
            "trashed_by_id": 0,
            "billable_status": 1,
            "value": 1.0,
            "record_date": 1645847200,
            "summary": "example",
            "user_id": 12365,
            "user_name": "Fred Coal",
            "user_email": "fredc@example.com",
            "parent_type": "Project",
            "parent_id": 89,
            "created_on": 1628497959,
            "created_by_id": 17,
            "created_by_name": "Fred Coal",
            "created_by_email": "fredc@example.com",
            "updated_on": 1635784512,
            "updated_by_id": 17,
            "job_type_id": 1,
            "source": "unknown",
            "original_is_trashed": false
              
    ]
'''

data = json.loads(data)
print(data['time_records'][0]['value'])

输出

1.0

【讨论】:

【参考方案2】:

正如@rdas 在评论中提到的,您可以通过以下方式访问“价值”:response['time_records'][0]['value']

【讨论】:

我试过这样,但我得到了:TypeError: string indices must be integers 嗯,这很奇怪 所以这意味着你得到了一个“不同”的回应。否则@rdas 写的应该可以工作。 我同意@RafałPrzetakowski 你能告诉我们你的python代码吗?我相信有答案;)

以上是关于ActiveCollab REST API 使用 Python 接收的嵌套 JSON 中的访问值 [已解决]的主要内容,如果未能解决你的问题,请参考以下文章

使用基于 REST 的 API 可以实现哪些功能/约束不能仅使用基于 HTTP 的 API

使用 Paypal REST API 时需要 API 证书

如果 REST 控制器类和接口具有使用 @HystrixCommand 注释的 API,则不会加载所有 REST API

使用REST API创建api需要哪些权限?

如何在 django-rest-framework 中为 API 使用 TokenAuthentication

Wordpress REST API (wp-api) 404 错误:无法访问 WordPress REST API