【问题标题】:Formatting json array in order to add label to values in Python格式化 json 数组以便在 Python 中为值添加标签
【发布时间】:2020-02-12 16:25:28
【问题描述】:

我正在编写一个 python 脚本以从设备中提取一些数据,我需要格式化我的 json 输出。 现在我有这个输出(示例):

[
    [
        "Environment",
        "ok"
    ],
    [
        "Memory",
        "ok"
    ]
]

但我想添加标签以调用值,例如以下示例:

[
    [
        {"component":"Environment",
        "status":"ok"}
    ],
    [
        {"component":"Memory",
        "status":"ok"}
    ]
]

我正在尝试在线搜索,但找不到要搜索的内容。有可能吗?

谢谢。

【问题讨论】:

    标签: python json python-3.x list dictionary


    【解决方案1】:

    试试这个...

    intermediate_output = [
        [
            "Environment",
            "ok"
        ],
        [
            "Memory",
            "ok"
        ]
    ]
    
    final_output = [[{"component": x[0], "status": x[1]}] for x in intermediate_output]
    
    print(final_output)
    

    输出:

    [[{'component': 'Environment', 'status': 'ok'}], [{'component': 'Memory', 'status': 'ok'}]]
    

    编辑:

    现在,如果您想要所有组件的列表,在继续之前,我建议您剥离嵌套列表并使其成为一个普通列表。

    >>> striped_list = [list1[0] for list1 in final_output]
    >>> striped_list
    
    [{'component': 'Environment', 'status': 'ok'}, {'component': 'Memory', 'status': 'ok'}]
    

    现在,使用列表推导...

    >>> list_of_components = [item['component'] for item in striped_list]
    >>> list_of_components
    
    ['Environment', 'Memory']
    

    对于特定组件的状态,您可以再次使用 for 循环或列表推导。

    >>> my_component = "Environment" # we have to find status of this component
    
    >>> my_component_status = [item['status'] for item in striped_list if item['component'] == my_component]
    
    >>> my_component_status
    
    ['ok']
    

    理解列表理解的优秀文档

    https://www.pythonforbeginners.com/basics/list-comprehensions-in-python

    干杯!!

    【讨论】:

    • 非常感谢。有用!但我还有两个问题。现在我的 json 格式如下: [ [ { "status": "ok", "component": "Environment" } ], [ { "status": "ok", "component": "Memory" } ] ] 为什么状态是第一要素?如果我想要所有组件的列表,启动的命令是什么?如果我想拥有单个组件的状态,启动的命令是什么?我问是因为我尝试了一些打印命令但没有运气。
    • @maures 在我回答你的问题之前,你能分享一下你作为第一个元素获得状态的代码截图吗?
    • 我只有一个 json 数组,就像你在我的主要问题上看到的那样。
    • @maures 我已经在不同的机器上多次运行相同的代码,你不可能收到第一个元素的状态,
    • 这不是问题。你能回答我其他问题吗?
    【解决方案2】:

    试试这个。

    使用列表理解

    a= [['Environment', 'ok'], ['Memory', 'ok']]
    [{'component':x,'status':y} for x,y in a ]
    

    输出

    [{'component': 'Environment', 'status': 'ok'},
     {'component': 'Memory', 'status': 'ok'}]
    

    【讨论】:

      猜你喜欢
      • 2021-03-12
      • 2021-03-14
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 2023-01-08
      • 2020-10-11
      • 1970-01-01
      • 2015-04-22
      相关资源
      最近更新 更多