我正在测量传感器的温度和湿度。 我希望然后将度量作为json字符串发布到服务器。 我正在使用python脚本。
为了优化,我想将json字符串分组并发布它们。
我的代码是这样的:
current_time = time.localtime()[0:6]
date = dateformat % current_time[0:6]
temp = str(round(temp, 1))
hum = str(round(hum, 1))
lastest_measure = {'UID': uuid, 'date': date, 'temperature': temp, 'humidity': hum}
r = requests.post(url, data=json.dumps(lastest_measure), headers=headers)
print r
>>> response 200: Good !
但我无法将lastest_measure
连接到grouped_measure
。
我尝试与
连接grouped_measure = dict(group_measure.items() + lastest_measure.items())
但它给了我一个错误:
“AttributeError:'dict'对象没有属性'item'”
我尝试使用所有度量创建一个字符串(格式正确,即:[{...},{...}, ...]
然后使用json.dumps
r = requests.post(url, data=json.dumps(grouped_measure), headers=headers)
但我收到错误500(因为格式不包括所有值之间的'')
所以我的问题是如何以resquest.post
方法的正确格式连接2个词典? (这是一种方法???)
提前致谢! 干杯, 垫
答案 0 :(得分:1)
问题是,POST请求期望JSON格式,它本质上类似于Python字典,只接受特定类型并且要求键是字符串。
这意味着,如果您正在编写时间序列,并且在许多字典(如Python字典)的字典中具有相同的键,它将覆盖给定的值。简而言之,对于接受JSON数据的网站,使用单个POST请求无法解决问题。
要解决此问题,您可以使用迭代。
这是一个随意的例子,但适合你的例子:
步骤1:获取字典(已有字典)并从中创建Python列表。
# arbitrary case
dicts = []
for num in range(20):
mydict = {i: i**num for i in range(50)}
dicts.append(mydict)
现在我有了我的词典,然后我可以迭代它们发布请求。
import json
# iterate
for mydict in dicts:
json_string = json.dumps(mydict)
r = requests.post(url, data=json_string, headers=headers)
现在,如果您可以定义词典并同时发布请求,则此代码将更加高效。
答案 1 :(得分:0)
我得到了这个解决方案:
data = [ ]
def add_DataSet(field1, field2, field3, field4):
global data
data.append({"field1":var1, "filed2":var2, "field3":var3, "field4":var4})
然后
add_DataSet(field1, field2, field3, field4)
与
完美配合r = requests.post(url, data=json.dumps(data), headers=headers)