Python3更新&;写入JSON值

Python3更新&;写入JSON值,python,json,python-3.x,Python,Json,Python 3.x,我刚开始编写Python,遇到了一些障碍。我试图向下面的示例json文件添加新信息 { "data1": { "info1": [ { "keyA1": "valueA1", "keyA2": "valueA2" }, { "keyB1": "valueB1", "KeyB2": "valueB2" } ], "info2": { "keyA

我刚开始编写Python,遇到了一些障碍。我试图向下面的示例json文件添加新信息

{
  "data1": {
    "info1": [
      {
        "keyA1": "valueA1",
        "keyA2": "valueA2"
      },
      {
        "keyB1": "valueB1",
        "KeyB2": "valueB2"
      }
    ],
    "info2": {
        "keyA1": "valueA1",
        "keyA2": "valueA2"
    }
  }
}
我用以下内容收集了json文件:

myData=json.load(打开('cool.json',encoding='utf-8'))

现在我有了我可以充分利用的数据。然而,当涉及到更新时,有三种情况我无法正常工作。我需要能够:

  • 将info2中的数据更改为数组(
    “info2”:[
    vs
    “info2”:{
    )并添加另一个数组 键B1类似于info1中的内容
  • 添加一个名为data2的全新部分
  • 一旦编辑完成,我会将
    myData
    转储回一个文件来编写它,我已经开始工作。我知道我的新特性正在显现,这可能是我刚刚错过的一些简单的东西。我熟悉
    myData.update(newData)
    ,但无法找到数组和新的部分。任何帮助都将不胜感激

    目前,我有:

    def dataAdd(value1, value2, dataSet, infoSet):
        if dataSet in myData.keys():
            newEntry = {"keyA1": value1, "keyA2": value2}
            myData[dataSet].update({infoSet:newEntry})
            with open('cool.json', "w") as jsonFile:
                json.dump(myData, jsonFile)
    
    目前,上述代码将按预期添加,但会覆盖现有密钥。这就是为什么我在添加第二组密钥时尝试转换为数组。

    我认为您正在执行以下操作:

    new_data = myData.update(...)
    
    .update()
    函数返回
    None
    ,因此您应该

    myData.update(...)
    

    然后,您已经更新了myData,可以开始编写了。

    以下是您要做的:

    导入json >>>#pprint只是为了获得漂亮的打印输出 >>>从pprint导入pprint >>>json_text='' ... { …“数据1”:{ …“信息1”:[ ... { …“keyA1”:“valueA1”, …“keyA2”:“valueA2” ... }, ... { …“keyB1”:“valueB1”, …“KeyB2”:“valueB2” ... } ... ], …“信息2”:{ …“keyA1”:“valueA1”, …“keyA2”:“valueA2” ... } ... } ... } ... ''' >>> >>>myData=json.load(json_文本) >>>pprint(myData) {'data1':{'info1':[{'keyA1':'valueA1','keyA2':'valueA2'}, {'KeyB2':'valueB2','keyB1':'valueB1'}], 'info2':{'keyA1':'valueA1','keyA2':'valueA2'}} >>> >>>#转换为词典列表 >>>myData['data1']['info2']=[myData['data1']['info2']] >>>#添加新节 >>>myData['data2']={} >>>#打印最终结果 >>>pprint(myData) {'data1':{'info1':[{'keyA1':'valueA1','keyA2':'valueA2'}, {'KeyB2':'valueB2','keyB1':'valueB1'}], 'info2':[{'keyA1':'valueA1','keyA2':'valueA2'}], 'data2':{} >>> >>>#只是忘了添加您在问题中提到的新钥匙 >>myData['data1']['info2'].append({'keyB1':'valueB1','keyB2':'valueB2'}) >>>pprint(myData['data1']['info2']) [{'keyA1':'valueA1','keyA2':'valueA2'}, {'keyB1':'valueB1','keyB2':'valueB2'}] >>> >>>pprint(myData) {'data1':{'info1':[{'keyA1':'valueA1','keyA2':'valueA2'}, {'KeyB2':'valueB2','keyB1':'valueB1'}], 'info2':[{'keyA1':'valueA1','keyA2':'valueA2'}, {'keyB1':'valueB1','keyB2':'valueB2'}]}, 'data2':{}
    希望能有帮助。

    关于你的第一个问题-

    myData['data1']['info2'] = [myData['data1']['info2']]
    

    第二,它类似于向dict()添加新键的方式。

    请显示您的代码。您是否尝试过
    myData['data1']['info2']=[dict(myData['data1']['info2']]]
    data2
    new section
    myData['data2']={}
    ?我将对此进行一次运行并检查。运行良好。非常感谢……您的帮助和耐心。不用担心。我很高兴它按照您的预期运行。