Я беру файл json и копирую только необходимые ключи и их значения в новый json-файл. Я получаю сообщение об ошибке «TypeError: строковые индексы должны быть целыми» в отношении того, где я копирую значения в myDict. Из того, что я собираю, json.load возвращает строку, а не словарь. Я проверил json-файл и имел действительный json-формат. Я использую Python 2.7.12. Я искал везде и не нашел ответа, который отвечает на мою конкретную проблему. Любая помощь, которую вы можете мне дать, очень ценится.Python json.load возвращает строку вместо словаря
import os
import sys
import json
def stripSpec(inp, outp):
#Load json file as python dictionary
obj = json.load(open(inp, "r"))
result=[]
#Go through JSON and save necessary keys and values
for i in obj:
myDict = {}
myDict["id"]=i.get('id').get('value')
myDict["data"]["BaselineExposure"]=i.get('data').get('BaselineExposure').get('value')
myDict["data"]["ColorMatrix2"]=i.get('data').get('ColorMatrix2').get('value')
result.append(myDict)
# Output the updated file with pretty JSON
open(outp, "w").write(json.dumps(result, sort_keys=True, indent=4, ensure_ascii=False, separators=(',', ':')))
return
#Save input and output paths as variables
inp = sys.argv[1]
outp = sys.argv[2]
#Call function
stripSpec(inp, outp)
пример json находится здесь. Это было резко сокращено, но в основном есть несколько записей для каждой модели камеры
[
{ "id": "Canon EOS 100D",
"data":[{
"SourceFile": "./Canon 100D/canon_eos_100d_11.dng",
"ExifToolVersion": 10.07,
"Directory": "./Canon 100D",
"FileSize": "18 MB",
"FileModifyDate": "2016:05:02 23:03:14-07:00",
"FileAccessDate": "2016:05:03 01:45:03-07:00",
"FileInodeChangeDate": "2016:05:02 23:03:14-07:00",
"FilePermissions": "rw-r--r--",
"ColorMatrix2": "0.6602 -0.0841 -0.0939 -0.4472 1.2458 0.2247 -0.0975 0.2039 0.6148",
"CameraCalibration1": "1.0648 0 0 0 1 0 0 0 0.9881",
"CameraCalibration2": "1.0648 0 0 0 1 0 0 0 0.9881",
"AnalogBalance": "1 1 1",
"AsShotNeutral": "0.512769 1 0.584809",
"BaselineExposure": -0.25,
"RedBalance": 1.950195
}]
},