Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据库表不可JSON序列化_Python_Json_Postgresql_Jupyter Notebook_Typeerror - Fatal编程技术网

Python 数据库表不可JSON序列化

Python 数据库表不可JSON序列化,python,json,postgresql,jupyter-notebook,typeerror,Python,Json,Postgresql,Jupyter Notebook,Typeerror,我正在Jupyter笔记本中为一个使用Ibm Watson的机器学习项目设置一些python代码,当我尝试从Postgresql数据库表添加数据时,我不断得到一个TypeError不是JSON可序列化的 以下是为清晰起见的完整输出: TypeError: description 0 Lorem ipsum sjvh hcx bftiyf, hufcil, igfgvju... 1 Lorem ajjg

我正在Jupyter笔记本中为一个使用Ibm Watson的机器学习项目设置一些python代码,当我尝试从Postgresql数据库表添加数据时,我不断得到一个TypeError不是JSON可序列化的

以下是为清晰起见的完整输出:

TypeError:                                           description
0   Lorem ipsum sjvh  hcx bftiyf,  hufcil, igfgvju...
1   Lorem ajjgvc wiufcfboitf iujcvbnb hjnkjc  ivjh...
2   Lorem aiv ibveikb jvk igvcib ok blnb v  hb b h...
3   Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb...
4   Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb...
5   Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb...
6   Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb...
7   Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb...
8   Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb...
9   Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb...
10  Lorem sivbnogc hbiuygv bnjiuygv bmkjygv nmjhgv...  is not JSON serializable
这是我的python代码,它部署了ML模型来分析这些数据,如您所见,这些数据是随机的句子,但在测试后将是产品描述:

from watson_developer_cloud import NaturalLanguageClassifierV1
import pandas as pd
import psycopg2


# Connecting to my database.
conn_string = 'host={} port={}  dbname={}  user={}  password={}'.format('159.***.20.***', 5432, 'searchdb', 'lcq09', 'Mys3cr3tPass')
conn_cbedce9523454e8e9fd3fb55d4c1a52e = psycopg2.connect(conn_string)
data_df_1 = pd.read_sql('SELECT description from public."search_product"', con=conn_cbedce2drf563454e8e9fd3fb8776fgh2e)

# Connecting to the ML model.
natural_language_classifier = NaturalLanguageClassifierV1(
    iam_apikey='TB97dFv8Dgug6rfi945F3***************'
)

# Apply the ML model to db datas
classes = natural_language_classifier.classify('9841d0z5a1-ncc-9076', data_df_1)
print(json.dumps(classes, indent=2)) # Pretty sure the error is happening here
我怎样才能解决这个问题

编辑1:


我尝试打印此方法:
print(data\u df\u 1.to\u json())
查看格式现在是否为json格式,这是我得到的输出:

{“description:{“0:“Lorem ipsum sjvh hcx bftiyf,hufcil,igfgvjuoigv gvj ifcil,ghn fgbcggtc yfctg h vgchbvju.”,“1:“Lorem ajgvc wiufcfboitf iujcvbnb hjkjc ivjh oikgjvn uhhhhhhhhhhhhhhhhgv m,khbgv mkjhhhhgv.”,“2:”“Lorem aiv ibveikb jvk igvcib ok blnb v hb b hb bn JB bhb bhn bn vf vbgfc vbgv nb nbh nj mjhbv mkjhbv nmjhgbv nmkn”,“3”:“Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb j dvx”,“4”:“Lorem jsvc smc cbd cbd cbd BCD BCVDJ OB VCB VCB j dvx”,“5”:“Lorem jsvc smc CIDBC cbd BCD VCB VCB BCB VCB BCB VCB dvx代码”>

但我现在在添加此方法时遇到了这个错误:
classes=natural\u language\u classifier.classify('9841d0z5a1-ncc-9076',data\u df\u 1.to\u json())
打印(json.dumps(classes,indent=2))
类中:

TypeError                                 Traceback (most recent call last)
<ipython-input-16-e72fac39b809> in <module>()
      1 classes = natural_language_classifier.classify('998520s521-nlc-1398', data_df_1.to_json())
----> 2 print(json.dumps(classes, indent=2))

/opt/conda/envs/DSX-Python35/lib/python3.5/json/__init__.py in dumps(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, default, sort_keys, **kw)
    235         check_circular=check_circular, allow_nan=allow_nan, indent=indent,
    236         separators=separators, default=default, sort_keys=sort_keys,
--> 237         **kw).encode(obj)
    238 
    239 

/opt/conda/envs/DSX-Python35/lib/python3.5/json/encoder.py in encode(self, o)
    198         chunks = self.iterencode(o, _one_shot=True)
    199         if not isinstance(chunks, (list, tuple)):
--> 200             chunks = list(chunks)
    201         return ''.join(chunks)
    202 

/opt/conda/envs/DSX-Python35/lib/python3.5/json/encoder.py in _iterencode(o, _current_indent_level)
    434                     raise ValueError("Circular reference detected")
    435                 markers[markerid] = o
--> 436             o = _default(o)
    437             yield from _iterencode(o, _current_indent_level)
    438             if markers is not None:

/opt/conda/envs/DSX-Python35/lib/python3.5/json/encoder.py in default(self, o)
    177 
    178         """
--> 179         raise TypeError(repr(o) + " is not JSON serializable")
    180 
    181     def encode(self, o):

TypeError: <watson_developer_cloud.watson_service.DetailedResponse object at 0x7f64ee350240> is not JSON serializable
TypeError回溯(最近一次调用)
在()
1类=自然语言分类器。分类('998520s521-nlc-1398',数据为1.to_json()
---->2个打印(json.dumps(类,缩进=2))
/opt/conda/envs/DSX-Python35/lib/python3.5/json/__init__.py转储(obj、skipkeys、sure_ascii、check_circular、allow_nan、cls、indent、separator、default、sort_key、**kw)
235检查循环=检查循环,允许循环=允许循环,缩进=缩进,
236分隔符=分隔符,默认值=默认值,排序键=排序键,
-->237**kw).编码(obj)
238
239
/encode中的opt/conda/envs/DSX-Python35/lib/python3.5/json/encoder.py(self,o)
198 chunks=self.iterencode(o,\u one\u shot=True)
199如果不存在(块,(列表,元组)):
-->200块=列表(块)
201返回“”。加入(块)
202
/opt/conda/envs/DSX-Python35/lib/python3.5/json/encoder.py in_iterencode(o,当前缩进级)
434提升值错误(“检测到循环参考”)
435标记[markerid]=o
-->436 o=_默认值(o)
437从_iterencode(o,_当前_缩进_级别)得到的收益率
438如果标记不是无:
/默认为opt/conda/envs/DSX-Python35/lib/python3.5/json/encoder.py(self,o)
177
178         """
-->179 raise TypeError(repr(o)+“不可JSON序列化”)
180
181 def编码(自身,o):
TypeError:不可序列化JSON
-

正如您在代码中看到的,我想在数据库中的描述表中部署一个机器学习文本分类器

我可以用下面的代码对一个句子进行分类,但我想对整个数据库的描述表进行分类:

classes=natural\u language\u classifier.classify('998260x551-nlc-1018','今天有多热?'))
打印(json.dumps(classes.result,indent=2))


这就是为什么我用dataframe
data\u df\u 1

替换了这个句子,您需要将表转换为特定的JSON格式,并使用
classify\u collection()
方法,如中的示例所示

导入json
从ibm_watson导入自然语言分类器1
自然语言分类器=自然语言分类器v1(
iam_apikey='{apikey}',
url='{url}')
classes=自然语言分类器。分类集合('10D41B-nlc-1',[{'text':'今天有多热?},{'text':'外面热吗?}])。获取结果()
打印(json.dumps(类,缩进=2))

有一个
df.to_json()
方法。谢谢你的回答,我应该把这个方法放在哪里?你能举个例子吗?我试着打印这个方法:
print(data\u df\u 1.to\u json())
,结果是:@Iocq请回答你的问题,而不是在评论中发帖。你想用json做什么?谢谢你的回答@reportgunner!如何用数据库表中名为:
data_df_1
?的描述数据替换文本值?尝试添加以下内容:[{'text':data_df_1.to_json()}],但出现以下错误:
WatsonApiException:error:Not found,code:404,信息:{'description':'Classifier Not found',X-dp-watson-tran-id:gateway02-126492285,X-global-transaction-id:ffea405d5ce6876fb574bfd
您知道我的表名是否需要为“文本”而不是“说明”吗?