Python:将JSON字典值写入JSON文件

Python:将JSON字典值写入JSON文件,python,json,python-3.x,dictionary,dump,Python,Json,Python 3.x,Dictionary,Dump,我正试图: 从JSON字典列表加载数据 将每个字典中特定键的值写入文件 然而,当我尝试将密钥对转储到新的.json文件时,它只打印最后一个字典密钥对。有人知道如何循环浏览每个字典并附加密钥对吗?我尝试了一些方法,但我似乎无法找出我遗漏了什么以及在哪里 这是我的密码: with open(join(dirname(__file__),'text.json')) as tone_json: python_obj = json.load(tone_json) #read file

我正试图:

  • 从JSON字典列表加载数据
  • 将每个字典中特定键的值写入文件
  • 然而,当我尝试将密钥对转储到新的.json文件时,它只打印最后一个字典密钥对。有人知道如何循环浏览每个字典并附加密钥对吗?我尝试了一些方法,但我似乎无法找出我遗漏了什么以及在哪里

    这是我的密码:

    with open(join(dirname(__file__),'text.json')) as tone_json:
        python_obj = json.load(tone_json)       #read file object into string
        my_list = python_obj["data"]            #assign list name to string
    
    for dictionary in my_list:                  #loop through dictionaries in list
        for key,value in dictionary.items():    #loop through key pairs in dictionaries
            if key == "text":
                with open('comments.json', 'w') as f:
                    json.dump("{}: {}".format(key,value), f)    #write key pair objects as json formatted stream to json file
                    f.write('\n')
    
    我的JSON文件示例:

    { 
        "data": [
        {
            "text": "apple",
            "created_time": "2017-12-23",
            "comment_count": 154,
            "like_count": 856,
            "id": "1015595299xxxxx"
        },
        {
            "text": "orange",
            "created_time": "2017-12-04",
            "comment_count": 13,
            "like_count": 437,
            "id": "10155952xxxxx"
        },
        {
            "text": "grapes",
            "created_time": "2017-12-04",
            "comment_count": 12,
            "like_count": 163,
            "id": "1015595299xxxxx"
        }
        ]
    }
    
    我的当前输出:

    "text: grapes"
    
    但是,我希望遍历每个字典,最终只打印每个“文本”键的值

    预期产出:

    "text: apple"
    "text: orange"
    "text: grapes"
    

    任何提示都会有帮助!谢谢

    您已在
    w
    模式下打开文件,您需要将其打开到
    a
    (追加模式)

    发件人:

    1。”w'仅用于写入(具有相同名称的现有文件将被删除)

    2a'打开文件进行追加;写入文件的任何数据都会自动添加到末尾

    Python 3.6.5 (default, Mar 30 2018, 06:42:10)
    [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> my_list = [{u'created_time': u'2017-12-23', u'text': u'apple', u'comment_count': 154, u'like_count': 856, u'id': u'1015595299xxxxx'}, {u'created_time': u'2017-12-04', u'text': u'orange', u'comment_count': 13, u'like_count': 437, u'id': u'10155952xxxxx'}, {u'created_time': u'2017-12-04', u'text': u'grapes', u'comment_count': 12, u'like_count': 163, u'id': u'1015595299xxxxx'}]
    >>> import json
    >>> my_list = [{u'created_time': u'2017-12-23', u'text': u'apple', u'comment_count': 154, u'like_count': 856, u'id': u'1015595299xxxxx'}, {u'created_time': u'2017-12-04', u'text': u'orange', u'comment_count': 13, u'like_count': 437, u'id': u'10155952xxxxx'}, {u'created_time': u'2017-12-04', u'text': u'grapes', u'comment_count': 12, u'like_count': 163, u'id': u'1015595299xxxxx'}]
    >>> for d in my_list:
    ...     for key, value in d.items():
    ...             if key == "text":
    ...                     with open('comments.json', 'a') as f:  # Append mode here
    ...                             json.dump("{}: {}".format(key,value), f)
    ...                             f.write('\n')
    ...
    
    comments.json的内容

    "text: apple"
    "text: orange"
    "text: grapes"
    

    'r' open for reading (default)
    'w' open for writing, truncating the file first
    'x' open for exclusive creation, failing if the file already exists
    'a' open for writing, appending to the end of the file if it exists
    'b' binary mode
    't' text mode (default)
    '+' open a disk file for updating (reading and writing)
    'U' universal newlines mode (deprecated)
    

    如果我理解正确,这应该满足您的要求:

    with open('comments.json', 'a') as f:
        json.dump("{}: {}".format(key,value), f)    #write key pair objects as json formatted stream to json file
        f.write('\n')
    

    只需将“w”更改为“a”,这样您就不会将w写入文件,而是将a添加到文件中

    当您实际上没有编写json时,为什么要使用
    json.dump()
    ?为什么不干脆
    f.write(“{}:{}\n”.format(key,value))
    ?另外,在
    a
    模式下打开文件,以防止覆盖以前运行的条目。它说json函数没有“write”属性。还需要json格式输出来调用单独的函数,而不是
    json.write(…)
    ,而是
    f.write(…)
    。另外,虽然您的输入文件是JSON文件,但您试图在输出文件中写入的数据肯定不是。我会记住的。这可能会在以后使用我的函数调用时派上用场,然后请除去答案。