使用一个JSON文件填充另一个时出现TypeError错误求助
问题原因
你遇到的TypeError是因为apiErrorDescription是列表(用[]包裹的结构),而非字典。在Python中,列表只能用整数索引(比如[0]表示第一个元素)访问内部元素,不能直接用字符串键(比如['reason'])取值。
看你第一个JSON里的apiErrorDescription结构:
"apiErrorDescription": [ { "reason": "invalid_parameter", "name": "item", "message": "Invalid value 'd_1097790'. not found" } ]
这里[]代表列表,里面的{}才是字典。你直接写json_object['apiStatusInfo']['apiErrorDescription']['reason'],相当于给列表传了字符串索引,自然触发错误。
修正方案
有两种实用的修正方式:
方式一:直接复用整个列表(最简洁)
既然要让第二个JSON和第一个完全一致,没必要逐个字段提取,直接把apiErrorDescription整个列表复制过去即可:
jsonfile2 = { "apiStatusInfo": { "apiStatus": json_object['apiStatusInfo']['apiStatus'], "apiStatusCode": json_object['apiStatusInfo']['apiStatusCode'], "apiDescription": json_object['apiStatusInfo']['apiDescription'], "apiErrorCode": json_object['apiStatusInfo']['apiErrorCode'], "apiErrorDescription": json_object['apiStatusInfo']['apiErrorDescription'] # 直接复用整个列表 } }
方式二:逐个提取字段(需修改内容时用)
如果确实需要单独提取每个字段,要先通过整数索引拿到列表里的字典元素,再访问对应键:
jsonfile2 = { "apiStatusInfo": { "apiStatus": json_object['apiStatusInfo']['apiStatus'], "apiStatusCode": json_object['apiStatusInfo']['apiStatusCode'], "apiDescription": json_object['apiStatusInfo']['apiDescription'], "apiErrorCode": json_object['apiStatusInfo']['apiErrorCode'], "apiErrorDescription": [ { "reason": json_object['apiStatusInfo']['apiErrorDescription'][0]['reason'], # 先取列表第一个元素[0] "name": json_object['apiStatusInfo']['apiErrorDescription'][0]['name'], "message": json_object['apiStatusInfo']['apiErrorDescription'][0]['message'] } ] } }
另外,你代码里json_object2 = json.dumps(jsonfile, indent=4)再json_object = json.loads(json_object2)这两步完全多余——jsonfile本身已经是Python字典,不需要转成JSON字符串再转回来,直接用jsonfile即可。
内容的提问来源于stack exchange,提问作者Baba
相关产品推荐
相关产品推荐

