2016-02-19 70 views
0

Python初学者在这里;Python json编码API的字典值

我有一个来自Excel的CSV文件。我想将条目解析为JSON字符串,以便与内部应用程序的API一起使用。

该脚本使用两个For循环,一个用于从CSV中读取条目并将它们添加到字典中,第二个用字典条目将数据替换为正确格式化为API请求的模板字符串,方法是转换为JSON字符串。

这是填充字典条目的一个例子 - 格式对应于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.dumps进行解析,但似乎没有工作。

有没有办法将数据从字典内编码到utf8中?

在此先感谢。

回答

0

它看起来像你从具有编码“的Cp1252” 你可以解释为

data = {1:2, 'endDateTime': '2016\xad02\xad22T10:50:00'.decode('cp1252')} 
json.dump(data) 
'{"1": 2, "endDateTime": "2016\\u00ad02\\u00ad22T10:50:00"}' 

如果你不是很肯定的编码类型和已经有这样的字符串字典则源数据你可以问JSON采取IT-照顾

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) 
+0

谢谢,有趣的是我之前有过但没有做任何事情。我已经添加了它,现在JSON字符串正在创建,但我有一个额外的错误,这可能是我的数据。 –