title: 内置数据结构-文件处理
subtitle: 处理JSON格式的文件
date: 2018-12-14 10:17:28
---
JSON的Error汇总
本文档主要记录了处理JSON文件一系列Error等。
1. json.decoder.JSONDecodeError: Expecting value: line 27290 column 3 (char 1035661)
- 类型错误:JSON解码错误
- 排错思路:1. 最大的可能就是原来的大JSON文件格式出现错误,比如原JSON正确的格式为: {"a":"1","b":{"c":"1","d":{} }}, 你的JSON格式为: {"a":"1","b":{"c":"1","d": }}, 缺少"d":对应的value:{}
- 解决方法:修改,保证大JSON格式正确。
2. KeyError: 'databaseEdition'
- 类型错误:数据请求错误。
-
排错思路:这是我处理JSON文件时候遇到的一个错误,特别少见,没有get字段。
for attr in rdsattributes: rdsondemand_output[sku][attr] = data['products'][sku]["attributes"][attr]
-
解决方法:
for attr in rdsattributes: rdsondemand_output[sku][attr] = data['products'][sku]["attributes"].get(attr)
3. AttributeError: 'dict' object has no attribute 'value'
- 类型错误:属性错误,dict对象没有对应的属性
-
排错思路:属性/方法用错
rdsondemand_output[sku]['unit'] = \ list(list(data['terms']['OnDemand'][sku].value)[0]["priceDimensions"].value)[0]["unit"]
-
解决方法:注意,下面的方法仍然用错
rdsondemand_output[sku]['unit'] = \ list(list(data['terms']['OnDemand'][sku].values)[0]["priceDimensions"].values)[0]["unit"]
4. TypeError: 'builtin_function_or_method' object is not iterable
- 类型错误:类型错误,输入错误的对象导致没有办法迭代
-
排错思路:values()属性, ()里面代表的是一坨大value。
rdsondemand_output[sku]['unit'] = \ list(list(data['terms']['OnDemand'][sku].values)[0]["priceDimensions"].values)[0]["unit"]
-
解决方法:
rdsondemand_output[sku]['unit'] = \ list(list(data['terms']['OnDemand'][sku].values())[0]["priceDimensions"].values())[0]["unit"]
5. TypeError: string indices must be integers
- 类型错误:类型错误,字符串索引必须是整数
-
排错思路:
for sku in rdssku_l: rdsondemand_output[sku] = {} for attr in rdsattributes: rdsondemand_output[sku][attr] = data['products'][sku]['attributes'].get(attr) rdsondemand_output[sku]['unit'] = \ list(list(data['terms']['OnDemand'][sku].values())[0]['priceDimensions'].values())[0]['unit'] rdsondemand_output[sku]['CNY'] = \ list(list(list(data['terms']['OnDemand'][sku].values())[0]['priceDimensions'].values())[0]['pricePerUnit'].values())[0]['CNY']
-
解决方法:
for sku in rdssku_l: rdsondemand_output[sku] = {} for attr in rdsattributes: rdsondemand_output[sku][attr] = data['products'][sku]['attributes'].get(attr) rdsondemand_output[sku]['unit'] = \ list(list(data['terms']['OnDemand'][sku].values())[0]['priceDimensions'].values())[0]['unit'] rdsondemand_output[sku]['CNY'] = \ list(list(data['terms']['OnDemand'][sku].values())[0]['priceDimensions'].values())[0]['pricePerUnit']['CNY']