我的代码正在获取Facebook信息我会收到此错误
Traceback (most recent call last):
File "crawler.py", line 34, in <module>
print graph.get_information(url[i]).encode('utf-8')
File "/weblog/workingspace/thun/facebook-api/facebook_api.py", line 23, in get_information
return json.dumps(ret)
File "/usr/lib64/python2.6/json/__init__.py", line 230, in dumps
return _default_encoder.encode(obj)
File "/usr/lib64/python2.6/json/encoder.py", line 367, in encode
chunks = list(self.iterencode(o))
File "/usr/lib64/python2.6/json/encoder.py", line 306, in _iterencode
for chunk in self._iterencode_list(o, markers):
File "/usr/lib64/python2.6/json/encoder.py", line 204, in _iterencode_list
for chunk in self._iterencode(value, markers):
File "/usr/lib64/python2.6/json/encoder.py", line 309, in _iterencode
for chunk in self._iterencode_dict(o, markers):
File "/usr/lib64/python2.6/json/encoder.py", line 275, in _iterencode_dict
for chunk in self._iterencode(value, markers):
File "/usr/lib64/python2.6/json/encoder.py", line 317, in _iterencode
for chunk in self._iterencode_default(o, markers):
File "/usr/lib64/python2.6/json/encoder.py", line 323, in _iterencode_default
newobj = self.default(o)
File "/usr/lib64/python2.6/json/encoder.py", line 344, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: ValueError('No JSON object could be decoded',) is not JSON serializable
我的代码是:
print graph.get_information("name of user").encode('utf-8')
我不知道什么是错的,因为当我使用https://developers.facebook.com/tools/explorer获取信息时。这是工作 但是当我使用facebook-api时,我遇到了一些错误。 请帮我。 谢谢你的关注。
聚苯乙烯。抱歉我的英文不好
答案 0 :(得分:0)
错误显示“某些类型不是JSON可序列化”,这意味着您从facebook获取的数据包含JSON不支持的数据类型。 JSON支持以下数据类型
实际将数据转换为JSON的代码(在您的情况下为facebook_api.py)需要处理此问题。您可以编写一个自定义json编码器来处理JSON不支持的所有数据类型。例如。
class CustomJSONEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, decimal.Decimal):
return float(obj)
if isinstance(obj, date):
return obj.isoformat()
else:
return super(CustomJSONEncoder, self).default(obj)
在上面的代码中,我正在处理JSON不支持的'decimal'和'date'数据类型。然后,您需要在调用'json.dumps'
时使用此自定义JSON编码器json.dumps(input_dict, cls=CustomJSONEncoder)