2016-02-19 67 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字符串正在創建,但我有一個額外的錯誤,這可能是我的數據。 –