2014-01-10 3 views
16

Привет Я пытаюсь взять данные из json-файла и вставить и id, а затем выполнить POST REST. мой файл data.json имеет:Python читать JSON файл и изменять

{ 
    'name':'myname' 
} 

, и я хотел бы добавить идентификатор, так что данные JSON выглядит следующим образом:

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

Так что я пробовал:

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

I не может загрузить файл формата 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 определен для текста в Юникоде. Вы можете использовать 'с codecs.open ('data.json', 'r +', encoding = 'utf-8') как f' – jfs

9

falsetru является хорошо, но есть небольшой баг:

Пусть оригинал 'ID' длина была больше 5 символов. Когда мы сбрасываем новый «id» (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

Я обновил ответ, чтобы исправить ошибку. – falsetru

Смежные вопросы