在读取文本数据时碰到了xxx is not JSON serializable,主要是因为json.dump()或者json.dumps()无法序列化.
原始函数
def last_getProEmotion(inputText, access_token): #情感分析的函数
url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify_custom?access_token=' + access_token
header = {'Content-Type ': 'application/json'}
body = {'text': inputText}
requests.packages.urllib3.disable_warnings()
res = requests.post(url=url, data=json.dumps(body), headers=header, verify=False)
time.sleep(1)
if res.status_code == 200:
info = json.loads(res.text)
print(info)
if 'items' in info and len(info['items']) > 0:
sentiment = info['items'][0]['sentiment']
if(sentiment==0):
return -2
else:
return sentiment
解决方法:
新建一个MyEncoder类来继承json.JSONEncoder,重写json.JSONEncoder中的方法
import json
import numpy as np
class MyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
elif isinstance(obj, np.floating):
return float(obj)
elif isinstance(obj, np.ndarray):
return obj.tolist()
else:
return super(NpEncoder, self).default(obj)
然后引用之后修改json.dumps()的参数
def last_getProEmotion(inputText, access_token): #情感分析的函数
url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify_custom?access_token=' + access_token
header = {'Content-Type ': 'application/json'}
body = {'text': inputText}
requests.packages.urllib3.disable_warnings()
res = requests.post(url=url, data=json.dumps(body,cls=MyEncoder), headers=header, verify=False)#就是这个位置
time.sleep(1)
if res.status_code == 200:
info = json.loads(res.text)
print(info)
if 'items' in info and len(info['items']) > 0:
sentiment = info['items'][0]['sentiment']
if(sentiment==0):
return -2
else:
return sentiment
参考
https://blog.csdn.net/qq_28935065/article/details/90265719?ops_request_misc=&request_id=&biz_id=102&utm_term=data=json.dumps(body,%20cls=NpEn&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-90265719