Как JSON-дамп массива, содержащего имена элементов и значения элементов в python?

#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)