在 Python 中动态构建 JSON [关闭]

Posted

技术标签:

【中文标题】在 Python 中动态构建 JSON [关闭]【英文标题】:Dynamically build JSON in Python [closed] 【发布时间】: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 结构中。 真的不清楚你在问什么。 【参考方案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 来扩展您的工具集。

以上是关于在 Python 中动态构建 JSON [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue 中从 JSON 构建动态 HTML 控件?

如何动态构建 JSON 对象?

python构建一个动态增长的真值表

使用存储在数组中的数据动态构建 JSON

在 Swift 中动态构建 JSON

Python类到Yaml / JSON [关闭]