Python初学者在这里;
我有一个来自Excel的CSV文件。我想将这些条目解析为JSON字符串,以便与内部应用程序的API一起使用。
该脚本使用两个For循环,一个用于从CSV读取条目并将它们添加到Dictionary中,第二个脚本将字典条目中的数据替换为模板字符串,该字符串通过转换为JSON字符串而针对API请求进行了正确格式化。
这是填充字典条目的示例 - 格式对应于API规范;
{'description': 'Mrs Davies 7M3/It', 'resourceId': '16', 'userId': 26, 'accessories': [], 'startReminder': '', 'recurrenceRule': {'monthlyType': 'null', 'interval': 2, 'type': 'weekly', 'weekdays': [1], 'repeatTerminationDate': '2016-05-29T08:50:00'}, 'title': 'Mrs Davies 7M3/It', 'resourceID': '16', 'endDateTime': '2016\xad02\xad22T10:50:00', 'participants': [], 'customAttributes': [], 'endReminder': '', 'startDateTime': '2016\xad02\xad22T09:50:00', 'resources': ['16'], 'invitees': []}
如您所见,startDataTime和endDateTime具有连字符符号的十六进制值。
'endDateTime': '2016\xad02\xad22T10:50:00'
如果我将此值作为变量(tempData)传递如下;
res_data = json.dumps(tempData)
我收到了错误;
Traceback (most recent call last):
File "api.py", line 70, in <module>
res_data = json.dumps(tempData)
File "/usr/lib/python2.7/json/__init__.py", line 243, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xad in position 4: invalid start byte
该脚本一直在运行,没有任何问题。我试图重新编码数据,因为它是通过json.dump解析的,但似乎无法正常工作。
有没有办法从字典中将数据编码成utf8?
提前致谢。
答案 0 :(得分:0)
看起来你从源代码中获取了具有编码功能的数据&#39; Cp1252&#39; 您可以将字典作为
data = {1:2, 'endDateTime': '2016\xad02\xad22T10:50:00'.decode('cp1252')}
json.dump(data)
'{"1": 2, "endDateTime": "2016\\u00ad02\\u00ad22T10:50:00"}'
如果你不太确定编码类型并且已经有了这样的字符串的字典,那么你可以让json来处理它 -
json.dumps({'endDateTime': '2016\xad02\xad22T10:50:00'}, ensure_ascii=False)
# It prints '{"endDateTime": "2016\xad02\xad22T10:50:00"}'
您的代码应使用以下更改
res_data = json.dumps(tempData, ensure_ascii=False)