如何在不使其成为json数组的情况下替换json文件中的键名

时间:2019-04-17 08:11:42

标签: python json

我正在编写一个脚本来替换json文件中的键名。当前文件的json格式为:

{json:data1}
{json:data2}
{json:data3}

但是只要我运行脚本

import json

json_data = []
with open('test.json') as f:
    for line in f:
        asjson = json.loads(line)
        asjson['new_keyname'] = asjson.pop('old_keyname')
        json_data.append(asjson)

with open('result.json', 'w') as file:
    json.dump(json_data, file, indent=2)  

它变成一个json数组:

[{json:data1},{json:data2},{json:data3}]

如何在不更改json格式的情况下更改键名?

2 个答案:

答案 0 :(得分:0)

第一个问题是您的JSON无效。我不太确定您要表示哪种数据,但至少您应该使用引号,即:

val file = File(getRealPathFromUri(context, uri))

有两个键/值对,看起来像这样:

{"data1": "value1"}

此外,此时无需解析一行。您的代码可能如下所示:

{"data1": "value1",
 "data2": "value2"}

这将直接将JSON读入dict,更改一个密钥并将其写回。

答案 1 :(得分:0)

您的json_data 数组本身,因此它转储到数组中。多行文本不是有效的json格式,但是如果您要这样做,请尝试:

with open('result.txt', 'w+') as f:
    for x in json_data:
        f.write(json.dumps(x) + '\n')

# result.txt
{"k3": "v1"}
{"k3": "v2"}
{"k3": "v3"}