我正在编写一个脚本来替换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格式的情况下更改键名?
答案 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"}