使用Python增加json值

时间:2015-12-10 11:11:31

标签: python json

我正在开发一个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将它们解析为字符串吗?

4 个答案:

答案 0 :(得分:3)

people = {'man': 31, 'women': 31, 'date': 23/11/15, 'city': "Moscu"}

dictionary

您可以通过键访问字典中的值:

>>> 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"}

每秒创建一个新词典,manwoman设置为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)