【问题标题】:How to JSON dump an array containing element names and element values in python?如何在 python 中 JSON 转储包含元素名称和元素值的数组?
【发布时间】:2021-12-30 13:41:32
【问题描述】:

我正在解析/解码 JSON 消息中的数组元素名称,我需要为其元素名称提供一些随机数值,然后必须 JSON 转储该数组(包括我解析的元素名称及其给出的随机值) .我解析的 JSON 消息类似于

{ "lib": {  "p1": "xyz", "p2": "lmn", "p3": "opq"  } }

我想转储的 JSON 消息应该是这样的,

{"foo":  {"bar": { "xyz": "15", "lmn": "33", "opq": "53"  } } }

我正在通过“for 循环”来处理数组元素,但没有得到预期的流量。有谁可以帮忙?!

注意:JSON 元素名称的数量不固定,可以是 3 或 5 或 10 或更多甚至 50。

【问题讨论】:

  • 您能否提供更多有关您预期的输入和输出的信息?你总是只对“lib”的键感兴趣吗?该对象内部可以有更多嵌套吗?到目前为止,您尝试了什么,到底出了什么问题?
  • 这不是一个真正的 JSON 问题。您使用json.load 解析消息,操作生成的dict,并使用json.dump 转储结果。这是您要询问的第 2 步。
  • 您多次提到数组,但没有显示任何具有或处理数组的 JSON 数据或代码。数组是从哪里来的?
  • 好吧,我自己解决了,抱歉通知晚了。但感谢大家的关注和时间。

标签: python arrays json amazon-web-services iot


【解决方案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)

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 2019-01-06
    相关资源
    最近更新 更多