#python #arrays #json #amazon-web-services #iot
Вопрос:
Я анализирую/декодирую имена элементов массива из сообщения JSON, и мне нужно присвоить некоторые значения случайных чисел его именам элементов, а затем сбросить этот массив в формате JSON (включая имена элементов, которые я проанализировал, и его случайные значения, которые я дал). Сообщение JSON, которое я проанализировал, похоже на
{ "lib": { "p1": "xyz", "p2": "lmn", "p3": "opq" } }
и сообщение JSON, которое я хочу сбросить, должно быть таким,
{"foo": {"bar": { "xyz": "15", "lmn": "33", "opq": "53" } } }
Я делаю это с помощью «для цикла» для обработки элементов массива, но не получил ожидаемого потока. Кто-нибудь может помочь ?!
Примечание : количество имен элементов JSON не является фиксированным, оно может быть 3, 5, 10 или даже более 50.
Комментарии:
1. Не могли бы вы предоставить нам немного больше информации о ваших ожидаемых вводах и выводах? Вас всегда интересуют только ключи «lib»? Может ли быть больше вложенности внутри этого объекта? Что вы пробовали до сих пор и что именно пошло не так?
2. На самом деле это не вопрос JSON. Вы анализируете сообщение с помощью
json.load
, манипулируете полученным результатомdict
и сбрасываете результат сjson.dump
помощью . Это шаг 2, о котором вы спрашиваете.3. Вы упоминаете массивы несколько раз, но не показали никаких данных JSON или кода, который содержит массивы или имеет дело с ними. При чем здесь массивы?
4. что ж, я решил это сам, извините, что сообщаю поздно. Но спасибо всем вам за ваше внимание и время.
Ответ №1:
После нескольких проб и ошибок, наконец, я сделал это, я помещаю здесь только несколько частей своего кода.
def customCallback(client, userdata, message): print("Received a new message: ") print(message.payload) parser = json.loads(message.payload) print ("parser : ",parser) global lib global para global payload if (parser["lib"]): global params global tags lib = [] para = [] payload = 'null' params = 1 tags = parser["lib"] print ("tags : ", tags) for i in tags: print (tags[i]) lib.append(tags[i]) print (lib) for i in range(len(lib)): para.append({lib[i]:random.randint(0,100)}) print ("para array", para) payload = json.dumps({'foo':{'bar':para}}) print ("payload in callback", payload) myMQTTClient.subscribe(subscribe_topic, 1, customCallback) while 1: if params == 1: myMQTTClient.publish(publish_topic, payload, 0) print ("payload published", payload) time.sleep(10)