【问题标题】:Dynamically build JSON in Python [closed]在 Python 中动态构建 JSON [关闭]
【发布时间】:2021-12-17 23:10:18
【问题描述】:

我需要在 Python 中动态构建 JSON 结构,然后将其传递给 API。结构如下:

{
  "list_name" : "listname0001,listname0002,listname0003",
  "subscriptions" :
  [
    {
      "first_name" : "Subscriber's First Name",
      "last_name" : "Subscriber's Last Name",
      "email" : "subscriber_email0001@api.trumpia.com",
      "mobile" :
      {
        "number" : "2003004000",
        "country_code" : "1"
      }
    }
  ]
}

在尝试正确执行此操作时遇到问题。我确信 Python 有一个 JSON 对象,只是不确定如何使用变量和数组等动态构建它。

任何帮助都会很棒!

【问题讨论】:

  • “动态构建”从什么开始?你有 json 作为文件吗?
  • 似乎“动态”是指python脚本
  • 你构建匹配的 Python 数据结构并使用json.dumps()
  • 是的,尝试用 Python 编写。并且数据是动态的,因此循环并从数组中读取并将这些值放入 JSON 结构中。
  • 真的不清楚你在问什么。

标签: python json


【解决方案1】:

如果你有字典,你可以通过调用来打印 JSON:

import json
print(json.dumps(data, indent=4)) # indent=4 for better formatting

否则,您将不得不通过输入以下内容来构建自己的字典和数组的组合:

data = {
  "list_name" : "listname0001,listname0002,listname0003",
  "subscriptions" :
  [
    {
      "first_name" : "Subscriber's First Name",
      "last_name" : "Subscriber's Last Name",
      "email" : "subscriber_email0001@api.trumpia.com",
      "mobile" :
      {
        "number" : "2003004000",
        "country_code" : "1"
      }
    }
  ]
}

你也可以只使用变量:

data = {
  "list_name" : ",".join(list_name),
  "subscriptions" :
  [
    {
      "first_name" : first_name,
      "last_name" : last_name,
      "email" : email,
      "mobile" :
      {
        "number" : mobile_number,
        "country_code" : mobile_country_code
      }
    }
  ]
}

【讨论】:

    【解决方案2】:

    您可以创建一个辅助函数以使用必要的结构动态填充 dict 对象中的值:

    from __future__ import annotations
    
    
    def build_api_request(names: list[str],
                          first: str, last: str,
                          email: str,
                          mobile_no: str,
                          country_code: str | int):
        return {
            "list_name": ','.join(names),
            "subscriptions": [
                    {"first_name": first,
                     "last_name": last,
                     "email": email,
                     "mobile": {"number": mobile_no,
                                "country_code": str(country_code)}}
            ]
        }
    
    
    req = build_api_request(["listname0001", "listname0002", "listname0003"],
                            "Subscriber's First Name",
                            "Subscriber's Last Name",
                            "subscriber_email0001@api.trumpia.com",
                            "2003004000",
                            1)
    
    import json
    print(json.dumps(req, indent=2))
    

    打印:

    {
      "list_name": "listname0001,listname0002,listname0003",
      "subscriptions": [
        {
          "first_name": "Subscriber's First Name",
          "last_name": "Subscriber's Last Name",
          "email": "subscriber_email0001@api.trumpia.com",
          "mobile": {
            "number": "2003004000",
            "country_code": "1"
          }
        }
      ]
    }
    

    【讨论】:

    • 这似乎有效。非常感谢!!
    • @LandonStatis 没问题,很高兴它有帮助。如果您觉得有帮助,请随时 accept 回复。
    【解决方案3】:

    在 JSON 中,{} 是一个类或一个字典,而 [] 是一个数组。 最简单的做法是创建一个字典,添加第一级字段,如果任何值是数组,则添加列表值,如果任何值是对象/字典,则添加 dict 值。

    当你有兼容的结构时,将其序列化为 json。 尝试搜索“python serialize to json”以获取示例,或者如果您尝试了某些方法但失败了,请发布您的代码以寻求帮助。

    【讨论】:

    • 一堂课?不,你是说列表吗?
    • 我写的是我的意思。 JSON 类型(JSON = JavaScript Object Notation)有不同的名称。在 Python 中,正如我后来写的那样——如果你继续阅读,你可以使用 dict 和 list(或者创建一个类来序列化它)。
    • JSON 对象几乎从未从类对象中序列化。你说“数组”不是列表。
    • 也许你的意思是类的实例 ...但这不是很有帮助... 一切都是一个类的实例
    • @juanpa.arrivillaga 在这里讨论没有意义。您使用所需的字段定义一个简单的类(例如 Java 中的 POJO),实例化它(因此创建一个对象)并为其提供值(例如通过构造函数)。如果你有一个固定的结构,这很好。如果您有任何后续问题,请提出问题,不要在这里发表评论。我建议您尝试一些其他语言,而不仅仅是 Python 来扩展您的工具集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 2016-07-20
    • 2021-11-29
    相关资源
    最近更新 更多