python3.5调用接口出现了“is not JSON serializable”这样的问题。
zengqiang47 发布于2017-06 浏览:5958 回复:5
0
收藏

option = {'lang_id':1}


result = aipNlp.wordseg('你好百度。',option)

官方文档上的代码,我出现了这样的问题。

File "C:\python3.5\lib\site-packages\aip\nlp.py", line 79, in wordseg

    return self._request(self.__wordsegUrl, self.__processData(data))

  File "C:\python3.5\lib\site-packages\aip\nlp.py", line 55, in __processData

    return json.dumps(content)

  File "C:\python3.5\lib\json\__init__.py", line 230, in dumps

    return _default_encoder.encode(obj)

  File "C:\python3.5\lib\json\encoder.py", line 198, in encode

    chunks = self.iterencode(o, _one_shot=True)

  File "C:\python3.5\lib\json\encoder.py", line 256, in iterencode

    return _iterencode(o, 0)

  File "C:\python3.5\lib\json\encoder.py", line 179, in default

    raise TypeError(repr(o) + " is not JSON serializable")

TypeError: b'\xc4\xe3\xba\xc3\xb0\xd9\xb6\xc8\xa1\xa3' is not JSON serializable


新手不懂,请问怎么解决。


收藏
点赞
0
个赞
共5条回复 最后由scmyzyh1978回复于2017-07
#6scmyzyh1978回复于2017-07

问题解决了。

原因是百度的nlp.py中有这样一个函数:

    def __encode(self, s):

        """

            编码

        """


        if sys.version_info.major == 2:

            if not isinstance(s, unicode):

                s = s.decode('utf8')


        return s.encode('gbk')

最后一句在python3+的版本中不用再编码,直接return s即可

    


1
#5scmyzyh1978回复于2017-07

我也遇到一样的问题,在python2.7版里文件头加# -*-coding:utf-8 -*-。再将文字编码处理一下就对了:u"你好百度。".encode("utf-8")。

但在python3.6版里报和楼主一样的错。

0
#4zengqiang47回复于2017-06
#3 于燕松_回复
编码不对,文件头写下编码,# -*-coding:utf-8 -*-

我开头已经注明了# -*-coding:utf-8 -*-   默认编码就是utf-8   。

0
#3于燕松_回复于2017-06

编码不对,文件头写下编码,# -*-coding:utf-8 -*-

0
#2zengqiang47回复于2017-06

TypeError: b'\xc4\xe3\xba\xc3\xb0\xd9\xb6\xc8\xa1\xa3' is not JSON serializable  请问这是个什么错误?

0
TOP
切换版块