首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python将多个JSON字典写入单个JSON文件

如何使用Python将多个JSON字典写入单个JSON文件
EN

Stack Overflow用户
提问于 2021-01-27 15:52:33
回答 1查看 64关注 0票数 0

我正在尝试将8个JSON字典写入到一个JSON文件中,每个字典都类似于下面显示的格式。

代码语言:javascript
复制
{
  "Category": {
    "0": "PCoIP Session Gateway (PSG)",
    "1": "Session Broker (PCM)",
    "2": "Web Access TURN Servers for PCoIP"
  },
  "Domain or IP address": {
    "0": "PCoIP Gateway Servers",
    "1": "Domains:  https://skylight-cm.us-east-1.amazonaws.com  https://skylight-cm-fips.us-east-1.amazonaws.com  https://skylight-cm.us-west-2.amazonaws.com  https://skylight-cm-fips.us-west-2.amazonaws.com  https://skylight-cm.ap-northeast-2.amazonaws.com  https://skylight-cm.ap-southeast-1.amazonaws.com  https://skylight-cm.ap-southeast-2.amazonaws.com  https://skylight-cm.ap-northeast-1.amazonaws.com  https://skylight-cm.ca-central-1.amazonaws.com  https://skylight-cm.eu-central-1.amazonaws.com  https://skylight-cm.eu-west-1.amazonaws.com  https://skylight-cm.eu-west-2.amazonaws.com  https://skylight-cm.sa-east-1.amazonaws.com  https://skylight-cm.us-gov-west-1.amazonaws.com  https://skylight-cm-fips.us-gov-west-1.amazonaws.com",
    "2": "Servers:  turn:*.us-east-1.rdn.amazonaws.com  turn:*.us-west-2.rdn.amazonaws.com  turn:*.ap-northeast-2.rdn.amazonaws.com  turn:*.ap-southeast-1.rdn.amazonaws.com  turn:*.ap-southeast-2.rdn.amazonaws.com  turn:*.ap-northeast-1.rdn.amazonaws.com  turn:*.ca-central-1.rdn.amazonaws.com  turn:*.eu-central-1.rdn.amazonaws.com  turn:*.eu-west-1.rdn.amazonaws.com  turn:*.eu-west-2.rdn.amazonaws.com  turn:*.sa-east-1.rdn.amazonaws.com"
  }
}

这是我目前的代码-

代码语言:javascript
复制
def export_to_json(df_domains_and_ip_addresses_to_add_to_your_allow_list \
                       , df_domains_and_ip_addresses_to_add_to_your_allow_list_for_pcoip \
                       , df_domains_and_ip_addresses_to_add_to_your_allow_list_for_workSpaces_streaming_protocol_wsp_beta \
                       , df_health_check_servers \
                       , df_pcoip_gateway_servers \
                       , df_ip_ranges \
                       , df_wsp_beta_gateway_servers \
                       , df_management_interface_ip_ranges):
    
    dest_file_name = 'WORKSPACES_PORT_REQ_' + str(datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')) + '.json'

    json_buffer = io.StringIO()

    # Adding dict to json file
    df_domains_and_ip_addresses_to_add_to_your_allow_list.to_json(json_buffer)

    my_bucket.put_object(Key=dest_file_name, Body=json_buffer.getvalue())

这段代码当前将一个字典添加到JSON文件中,如何将所有其他字典(作为参数传递给此函数)添加到相同的JSON文件中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-27 16:48:57

您希望输出文件的格式是{...} (将所有文件的内容合并到一个字典中)还是[{...}, {...} ...] (每个文件都是一个列表元素)?

根据您的目标:

代码语言:javascript
复制
import json

# --- FORMAT: {...} --- #
result1 = {}

# your input dictionaries
for dct in dicts:
    # combine the dictionaries
    # if there are duplicate keys, the ones in 'dct' will overwrite those already in 'result'
    result1 = {**result1, **dct}

# write the output file
with open('result1.json', 'w') as outfile:
    json.dump(result1 , outfile, indent=2) 


# --- FORMAT: [{...}, {...} ...] --- #
result2 = []

# your input dictionaries
for dct in dicts:
    # append the dictionary to the list
    result2.append(dct)

# write the output file
with open('result2.json', 'w') as outfile:
    json.dump(result2, outfile, indent=2) 

上面给出了两个不同的输出文件,具体取决于所需的格式。

编辑:要获得列表中的输入dfs,可以在函数中使用locals().keys()。所以你可以做像for df in locals().keys(): ...这样的事情

把所有这些放在一起:

代码语言:javascript
复制
def export_to_json(df_domains_and_ip_addresses_to_add_to_your_allow_list \
                       , df_domains_and_ip_addresses_to_add_to_your_allow_list_for_pcoip \
                       , df_domains_and_ip_addresses_to_add_to_your_allow_list_for_workSpaces_streaming_protocol_wsp_beta \
                       , df_health_check_servers \
                       , df_pcoip_gateway_servers \
                       , df_ip_ranges \
                       , df_wsp_beta_gateway_servers \
                       , df_management_interface_ip_ranges):
    
    dest_file_name = 'WORKSPACES_PORT_REQ_' + str(datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')) + '.json'

    json_buffer = io.StringIO()

    result = {}
    dfs = locals().keys()
    
    for df in dfs:
        result = {**result, **df}

    # Adding dict to json file
    result.to_json(json_buffer)

    my_bucket.put_object(Key=dest_file_name, Body=json_buffer.getvalue())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65914919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档