Python: соберите несколько чтений и отправьте в json - PullRequest
0 голосов
/ 25 июня 2018

Я немного сбит с толку объектами JSON и Python, я много читал по словарям Python, но все еще не смотрю.У меня Raspberry Pi с сенсором для считывания давления.Я хочу собрать несколько чтений и отправить их на MQTT-сервер.Я хочу, чтобы выходные данные выглядели так:

{'pressure': 2, 'time': 1529923890.237}
{'pressure': 5, 'time': 1529923890.247}
{'pressure': 9, 'time': 1529923890.258}
{'pressure': 2, 'time': 1529923890.268}
{'pressure': 6, 'time': 1529923890.278}
{'pressure': 2, 'time': 1529923890.288}

Пример кода, который у меня есть:

import json
import time
from decimal import Decimal

count = 0
read_pressures = {}
while (count < 100):
    current_time=time.time()
    data = dict(pressure=2,time=current_time)
    time.sleep(0.01)
    count = count + 1
    print( data) #
    read_pressures = data
print ("printing all values")
print(read_pressures)

Все, что я получаю, это последнее значение.Это лучшая практика, чтобы поместить все элементы в словарь, а затем преобразовать в JSON, или я должен просто положить прямо в строку в формате JSON?

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Две проблемы с вашим кодом.

read_pressures = {}

создает словарь, но у вас есть список элементов, так что список будет лучше соответствовать вашим целям

read_pressures = []

Другая проблема связана с

read_pressures = data

Вы просто каждый раз переназначаете значение read_pressures, но вместо этого вам нужно собрать data dicts, поэтому

read_pressures.append(data)

даст вам желаемый результат.

0 голосов
/ 25 июня 2018

Я улучшаю твой код:

import pprint
import time
from datetime import datetime

read_pressures = list()
for _ in range(100):
    current_time = datetime.now().strftime('%Y-%m-%dT%H:%M:%S')
    data = dict(pressure=2, time=current_time)
    time.sleep(0.01)
    read_pressures.append(data)

pprint.pprint(read_pressures)
0 голосов
/ 25 июня 2018

Это действительно зависит от того, как вам нужны ваши данные для отправки.Вы также перезаписываете read_pressures с каждым проходом цикла.

import json
import time
from decimal import Decimal

count = 0
read_pressures = []
while (count < 100):
    current_time=time.time()
    data = dict(pressure=2,time=current_time)
    time.sleep(0.01)
    count = count + 1
    print(data) #
    read_pressures.append(data)
print ("printing all values")
print(read_pressures)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...