2014-01-10 193 views
16

嗨我想从一个json文件中取数据并插入id然后执行POST REST。 我的文件data.json有:Python阅读JSON文件并修改

{ 
    'name':'myname' 
} 

,我想,这样的JSON数据看起来像添加ID:

{ 
    'id': 134, 
    'name': 'myname' 
} 

所以,我想:

import json 
f = open("data.json","r") 
data = f.read() 
jsonObj = json.loads(data) 

我无法加载json格式文件。 我该怎么做才能将json文件转换为json对象并添加另一个id值。

+3

这是无效的json。一个字符串应该用**双引号**包装。 – falsetru

+0

谢谢你解决了它。 – codeBarer

回答

26

设置项目使用data['id'] = ...

import json 

with open('data.json', 'r+') as f: 
    data = json.load(f) 
    data['id'] = 134 # <--- add `id` value. 
    f.seek(0)  # <--- should reset file position to the beginning. 
    json.dump(data, f, indent=4) 
    f.truncate()  # remove remaining part 
+5

无关:json格式是为Unicode文本定义的。你可以使用'codecs.open('data.json','r +',encoding ='utf-8')作为f' – jfs

9

falsetru的解决方案是好的,但有一个小错误:

假设原来的“身份证”长度超过5个字符大。当我们随后使用新的'id'(仅有3个字符的134)转储时,从文件中的位置0开始写入的字符串的长度为,比原始长度短。额外的字符(如'}')保留在原始内容的文件中。

我解决了通过替换原始文件。

import json 
import os 

filename = 'data.json' 
with open(filename, 'r') as f: 
    data = json.load(f) 
    data['id'] = 134 # <--- add `id` value. 

os.remove(filename) 
with open(filename, 'w') as f: 
    json.dump(data, f, indent=4) 
+0

我更新了答案来修复一个bug。 – falsetru