如何使用JSON转储多个字典而不将它们包装在列表中

时间:2019-05-09 16:07:09

标签: python json google-sheets-api

我正在尝试处理JSON文件并将其转储回去。

下面是JSON文件-请注意下面如何包装两个字典...

{"installed":
    {"client_id":"xxx",
    "project_id":"quickstart-1557411376659",
    "auth_uri":"xxx",
    "token_uri":"xxx",
    "auth_provider_x509_cert_url":"xxx",
    "client_secret":"xxx",
    "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
    }
}

我正在尝试使用以下python代码读取JSON文件以对其进行操作,然后将其写回。

with open('google_sheets_credentials.json', 'r+') as file:
    google_sheets_auth_dict = json.load(file)
    #Manipulate file contents here

with open('google_sheets_credentials.json', 'r+') as file:
    json.dump(google_sheets_auth_dict, file)

此代码在运行几次后失败,因为需要将多个字典包装在列表中才能以JSON格式写出-像这样:

解释此要求的原因here

with open('google_sheets_credentials.json', 'r+') as file:
    json.dump([google_sheets_auth_dict], file)

问题在于,在这种情况下我无法做到这一点,因为该JSON最终将被馈送到Google Sheets的API中,因此它不希望将JSON包装在列表中。

我该如何以Google期望的格式读取,处理和吐出文件?

1 个答案:

答案 0 :(得分:1)

此示例案例:

import json

example_json = '''{"installed":
    {"client_id":"xxx",
    "project_id":"quickstart-1557411376659",
    "auth_uri":"xxx",
    "token_uri":"xxx",
    "auth_provider_x509_cert_url":"xxx",
    "client_secret":"xxx",
    "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
    }
}'''

google_sheets_auth_dict = json.loads(example_json)

google_sheets_auth_dict['client_id'] = 'yyy'

print(json.dumps(google_sheets_auth_dict))

seems to work fine

我猜测#Manipulate file contents here位出现了问题,未显示。或者,示例JSON看起来不像失败案例。