我正在使用站点的REST API,主要是使用Python的“请求”模块来获取json响应。 GET请求的目标是最终拉出用户的表单响应,该响应最终是一个复杂的json文档。要解决这个问题:
user_form_submission = requests.get('https://www.url/doc.json',
auth = (api_key, secret),
params = params)
python_obj = json.loads(user_form_submission.text)
trimmed_dict = python_obj['key'][0]['keys']
对于上下文,这是trimmed_dict格式为.json的内容:
{
"Date": { "value": "2020-04-26", "type": "date" },
"Location": {
"value": "Test ",
"type": "text",
"geostamp": "lat=34.00000, long=-77.00000, alt=17.986118, hAccuracy=65.000000, vAccuracy=10.000000, timestamp=2020-04-26T23:39:56Z"
},
"form": {
"value": [
{
"form_Details": {
"value": [
{
"code": {
"value": "0000000000",
"type": "barcode"
},
"Name": { "value": "bob", "type": "text" }
}
],
"type": "group"
},
"Subtotal": { "value": "4", "type": "decimal" },
"form_detail2": {
"value": [
{
"name": {
"value": "billy",
"type": "text"
},
"code": {
"value": "00101001",
"type": "barcode"
},
"Classification": {
"value": "person",
"type": "select1"
},
"Start_Time": { "value": "19:43:00", "type": "time" },
"time": { "value": "4", "type": "decimal" }
}
],
"type": "subform"}
}
]
}
}
现在我有一部分包含有用和无用的json。从这一点来看,我可以在POST中传递此obj吗?我已经尝试了所有可以想到的方法,但已将其关闭。
了解我想怎么做,这就是我认为的样子:
json_post = requests.post(' https://url/api/doc.json',
auth = (api_key, secret),
json = {
"form_id" : 'https://url.form.com/formid',
'payload':{
json.dumps(trimmed_dict)
}})
但是,当我这样做时,出现以下错误-
TypeError: Object of type set is not JSON serializable
如何通过本POST推送此命令?如果有更有效的解决方法,我很乐意提出建议。
答案 0 :(得分:1)
尝试删除Hammer
周围的花括号。 json.dumps(trimmed_dict)
将您的json.dumps
变成一个字符串,当用大括号包围时,它将变成一个蟒蛇trimmed_dict
。
另外,您可以删除set
并将json.dumps
作为与trimmed_dict
关联的值直接插入结构。
答案 1 :(得分:1)
从有效内容中删除多余的{}。有效负载本身就是一个密钥,而json.dumps(trimmed_dict)
作为一个值就足够了
json_post = requests.post(' https://url/api/doc.json',
auth = (api_key, secret),
json = {
"form_id" : 'https://url.form.com/formid',
"payload": json.dumps(trimmed_dict)
})