我正在开发一个MQTT客户端,该客户端正在发布主题" city / place"并以json对象格式将数据发送到MQTT代理。
我对结构数据存在误解。
我的json对象看起来像这样:
people = {'man': 31, 'women': 31, 'date': 23/11/15, 'city': "Moscu"}
出于某种原因,我需要每秒增加来到Moscu的人数。
这是我的完整代码:
import paho.mqtt.client as mqtt
import json
import time
mqttc = mqtt.Client('python_publisher')
mqttc.connect('127.0.0.1', 1883)
people = {'man': 31, 'women': 31, 'date': 23/11/15, 'city': "Moscu"}
while True:
people_json2str = json.dumps(people)
print (people_json2str)
mqttc.publish('city/place', people_json2str)
people = {'man': 31 + 1, 'women': 31 + 1, 'date': 23/11/15, 'city': "Moscu"}
time.sleep (1)
我将json解析为字符串格式,因为mqtt需要这样的数据。然后我将它发布到主题" city / place"。 之后,我尝试增加json对象的值,但它不是那样工作。 您现在有办法更新json值并使用Python将它们解析为字符串吗?
答案 0 :(得分:3)
此
people = {'man': 31, 'women': 31, 'date': 23/11/15, 'city': "Moscu"}
您可以通过键访问字典中的值:
>>> print people['man']
>>> 31
您也可以像更改变量一样更改字典值。
要增加x=1
,请执行x+=1
。类似地,你做
people['man'] +=1
将整数“man”增加1。这同样适用于女性。
顺便说一下,我很惊讶地看到23/11/15
没有引号(这会使它成为一个字符串)。你写的是23 divided by 11 divided by 15
。那肯定不是你想要的:D
答案 1 :(得分:0)
此
people = {'man': 31 + 1, 'women': 31 + 1, 'date': '23/11/15', 'city': "Moscu"}
每秒创建一个新词典,man
和woman
设置为32
,而不是增加你想要做的相应的最后一个值。
答案 2 :(得分:0)
您需要了解如何访问python词典
import paho.mqtt.client as mqtt
import json
import time
mqttc = mqtt.Client('python_publisher')
mqttc.connect('127.0.0.1', 1883)
people = {'man': 31, 'women': 31, 'date': 23/11/15, 'city': "Moscu"}
while True:
people_json2str = json.dumps(people)
print (people_json2str)
mqttc.publish('city/place', people_json2str)
people['man'] = people['man'] + 1
people['women'] = people['woman'] + 1
time.sleep (1)
答案 3 :(得分:0)
您也可以使用 .contains 。这适用于那些希望将其表值转换为键的人。
jsondata = {}
for index, row in df.iterrows():
if jsondata.__contains__(row['Vehicle']):
jsondata[row['Vehicle']] += 1
else:
jsondata[row['Vehicle']] = 1
print(jsondata)
如果你想让你的父键和子键具有相同的表值,你也可以这样做。
for index, row in df.iterrows():
if jsondata.__contains__(row['Vehicle']):
jsondata[row['Vehicle']][row['Vehicle']] += 1
else:
jsondata[row['Vehicle']]={}
jsondata[row['Vehicle']][row['Vehicle']] = 1
print(jsondata)