通过遍历每个JSON记录,从API响应中的常用字段定义一类实例变量

    self.id=response['identifier']  -->output: 1234
    self.name=response['FirstName'] -->output: ABCD
    self.country_name=response['Country'] -->output: US
    self.route_type=[j.get('route_type') or None for j in response['route_details']] -->output: ['Primary','Secondary']
    self.route=[j.get('route_code') or None for j in response['route_details']] -->output: ['AX1','Ax2']
    self.pin=[j.get('pin_code') or None for j in response['route_details']] -->output: ['4456','7654']

我正在try 在以下几行中创建嵌套响应

    Details: {
    id: "1234",
    name: "ABCD"
    },
    Country:{
    country_name:"US"
    }
    Route_details: [
    {route_type: "Primary", route: "AX1",pin: "4456"},
    {route_type: "Secondary", route: "Ax2",pin: "7654"}
    ]

如何获得上述响应,并根据其预期的payload传递给下游API.

推荐答案

要实现该输出,您只需向类中添加一个函数,构建一个包含所有数据的大字符串,然后返回它.我在这个示例代码中复制了您的 struct ,在将此函数添加到您的类定义后,您没有提供名称,所以我猜测它可能是APIResponse,您只需调用以获取您所描述的输出格式就可以使用它.

以下是代码:

class APIResponse:
    def make_nested_response(self) -> str:
        out_format = ''
        out_format += ' ' * 4 + 'Details: {\n'
        out_format += ' ' * 4 + f'id: "{self.id}",\n'
        out_format += ' ' * 4 + f'name: "{self.name}"\n'
        out_format += ' ' * 4 + '},\n'
        out_format += ' ' * 4 + 'Country:{\n'
        out_format += ' ' * 4 + f'country_name:"{self.country_name}"\n'
        out_format += ' ' * 4 + '}\n'
        out_format += ' ' * 4 + 'Route_details: [\n'
        for route_type, route, pin in zip(self.route_type, self.route, self.pin):
            out_format += ' ' * 4 + f'{{route_type: "{route_type}", route: "{route}",pin: "{pin}"}},\n'
        out_format = out_format[:-2] + '\n'  # to cut off last comma
        out_format += ' ' * 4 + ']\n'
        return out_format


if __name__ == '__main__':
    apir = APIResponse()
    apir.id = 1234
    apir.name = 'ABCD'
    apir.country_name = 'US'
    apir.route_type = ['Primary', 'Secondary']
    apir.route = ['AX1', 'Ax2']
    apir.pin = ['4456', '7654']

    output = apir.make_nested_response()
    print(output)

这是当我运行与您的示例类似的代码时得到的结果:

    Details: {
    id: "1234",
    name: "ABCD"
    },
    Country:{
    country_name:"US"
    }
    Route_details: [
    {route_type: "Primary", route: "AX1",pin: "4456"},
    {route_type: "Secondary", route: "Ax2",pin: "7654"}
    ]

Python-3.x相关问答推荐

如何从拼图分区数据集中读取数据到Polar

为什么 tkinter 在 tkinter 窗口外计算鼠标事件?

如何使用 Selenium Python 连续单击一个按钮直到另一个元素出现?

如何获取实例化 `types.GenericAlias` 的下标类?

「Python Pandas」多级索引列和行匹配,如果列和行名称相似,则排除这些单元格中的值添加

删除列表中的第二个出现

生成具有偶数个 0 和 1 的给定长度的所有二进制数

正则表达式从文本文件中捕获包含制表符/空格和子字符串的部分字符串

`pyspark mllib` 与 `pyspark ml` 包

例外:使用 Pyinstaller 时找不到 PyQt5 插件目录,尽管 PyQt5 甚至没有被使用

PyQt:退出时没有错误消息(回溯)

如何确定一个类的元类?

Tkinter 窗口显示(无响应)但代码正在运行

if 语句中冒号的语法错误

用 numpy nan 查找列表的最大值

在没有时间的python中创建日期

python 3的蓝牙库

Python 3 中的连接列表

用 Anaconda 安装了一个包,无法在 Python 中导入

在 Ipython 中使用 Pylint (Jupyter-Notebook)