[英]Getting a JsonDecodeError on Jupyter Notebook
I'm setting up a Jupyter Notebook that apply a Machine learning model from the Ibm watson studio API to some datas that are coming from my Postgresql database. 我正在设置一个Jupyter Notebook,它将来自Ibm watson studio API的机器学习模型应用于来自我的Postgresql数据库的一些数据。
While reshaping the data to be readable by the API, a JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
appeared and I can't solve it. 在重塑API可读的数据时,出现了JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
出现,但我无法解决。
This is the full traceback: 这是完整的回溯:
---------------------------------------------------------------------------
JSONDecodeError Traceback (most recent call last)
<ipython-input-114-9d8e7cf98a41> in <module>()
1 import json
2
----> 3 classes = natural_language_classifier.classify_collection('7818d2s519-nlc-1311', reshaped).get_result()
4
5 print(json.dumps(classes, indent=2))
/opt/conda/envs/DSX-Python35/lib/python3.5/site-packages/watson_developer_cloud/natural_language_classifier_v1.py in classify_collection(self, classifier_id, collection, **kwargs)
152 if collection is None:
153 raise ValueError('collection must be provided')
--> 154 collection = [self._convert_model(x, ClassifyInput) for x in collection]
155
156 headers = {}
/opt/conda/envs/DSX-Python35/lib/python3.5/site-packages/watson_developer_cloud/natural_language_classifier_v1.py in <listcomp>(.0)
152 if collection is None:
153 raise ValueError('collection must be provided')
--> 154 collection = [self._convert_model(x, ClassifyInput) for x in collection]
155
156 headers = {}
/opt/conda/envs/DSX-Python35/lib/python3.5/site-packages/watson_developer_cloud/watson_service.py in _convert_model(val, classname)
461 if classname is not None and not hasattr(val, "_from_dict"):
462 if isinstance(val, str):
--> 463 val = json_import.loads(val)
464 val = classname._from_dict(dict(val))
465 if hasattr(val, "_to_dict"):
/opt/conda/envs/DSX-Python35/lib/python3.5/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
317 parse_int is None and parse_float is None and
318 parse_constant is None and object_pairs_hook is None and not kw):
--> 319 return _default_decoder.decode(s)
320 if cls is None:
321 cls = JSONDecoder
/opt/conda/envs/DSX-Python35/lib/python3.5/json/decoder.py in decode(self, s, _w)
337
338 """
--> 339 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
340 end = _w(s, end).end()
341 if end != len(s):
/opt/conda/envs/DSX-Python35/lib/python3.5/json/decoder.py in raw_decode(self, s, idx)
353 """
354 try:
--> 355 obj, end = self.scan_once(s, idx)
356 except StopIteration as err:
357 raise JSONDecodeError("Expecting value", s, err.value) from None
JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
Here's the code in my Notebook: 这是我的笔记本中的代码:
from watson_developer_cloud import NaturalLanguageClassifierV1
import pandas as pd
import psycopg2
import json
# connect to the database
conn_string = 'host={} port={} dbname={} user={} password={}'.format('119.203.10.242', 5432, 'mydb', 'locq', 'Mypass***')
conn_cbedce9523454e8e9fd3fb55d4c1a52e = psycopg2.connect(conn_string)
# select the description column
data_df_1 = pd.read_sql('SELECT description from public."search_product"', con=conn_cbedce9523454e8e9fd3fb55d4c1a52e)
# package phrases into format required by Watson
reshaped = json.dumps({'collection': [{'text' : t} for t in data_df_1['description']]})
# connect to the Watson Studio API
natural_language_classifier = NaturalLanguageClassifierV1(
iam_apikey='F76ugy8hv1s3sr87buhb7564vb7************'
)
# apply the model to the datas
classes = natural_language_classifier.classify_collection('7818d2s519-nlc-1311', reshaped).get_result()
# print the results
print(classes)
When I comment the classes
line and I just do print(reshaped)
, this is the response I'm getting which is the correct format for Watson studio: 当我在classes
行中注释并执行print(reshaped)
,这是我得到的响应,这是Watson studio的正确格式:
{
"collection": [
{
"text": "Lorem ipsum sjvh hcx bftiyf, hufcil, igfgvjuoigv gvj ifcil ,ghn fgbcggtc yfctgg h vgchbvju."
},
{
"text": "Lorem ajjgvc wiufcfboitf iujcvbnb hjnkjc ivjhn oikgjvn uhnhgv 09iuvhb oiuvh boiuhb mkjhv mkiuhygv m,khbgv mkjhgv mkjhgv."
},
{
"text": "Lorem aiv ibveikb jvk igvcib ok blnb v hb b hb bnjb bhb bhn bn vf vbgfc vbgv nbhgv bb nb nbh nj mjhbv mkjhbv nmjhgbv nmkn"
},
{
"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"
},
{
"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"
},
{
"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"
},
{
"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"
}
]
}
Please help. 请帮忙。
EDIT 编辑
This is what I just did: 这就是我刚刚做的:
reshape = json.dumps([{'text' : t} for t in data_df_1['description']])
print(reshape)
This is the result I'm getting: 这是我得到的结果:
[{"text": "Lorem ipsum sjvh hcx bftiyf, hufcil, igfgvjuoigv gvj ifcil ,ghn fgbcggtc yfctgg h vgchbvju."}, {"text": "Lorem ajjgvc wiufcfboitf iujcvbnb hjnkjc ivjhn oikgjvn uhnhgv 09iuvhb oiuvh boiuhb mkjhv mkiuhygv m,khbgv mkjhgv mkjhgv."}, {"text": "Lorem aiv ibveikb jvk igvcib ok blnb v hb b hb bnjb bhb bhn bn vf vbgfc vbgv nbhgv bb nb nbh nj mjhbv mkjhbv nmjhgbv nmkn"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "lorem sivbnogc hbiuygv bnjiuygv bmkjygv nmjhgv"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "lore juhgv bnmkiuhygv nmkiuhb mkjiuhb mkjgv mkjhygv nmkjuytfrdc mjhygtfvc mkijuytfc vbnmkjuhygtfv bnmkjuhygtfvc mjhygv mjhgv nmjhuygv bnjhb mnhgv mjhgv njhgv bnjhb njhygvbnjkiuhbhjihbv mjhgbv nmkjhbhnjb njhgv njmkjhbvbh nhgv mbhhnb hjbhu njbhn njb n jjijh bb jiji bi jiijib bkiijij b hggg."}, {"text": "Lorem uhygfv bniuhgv nmkjuhgv nmkijuhygv mkihv bjijnb bnjib bjinb bnjub vgvg bhgfc nhgytredxc ngtfv mkjuygfcv bnmjuygv mjhgv bnmkjhgv njhgv njgfvc."}]
I copied the results and replace the reshape with these datas: 我复制了结果,并用以下数据替换了重塑:
#reshape = json.dumps([{'text' : t} for t in data_df_1['description']])
reshape = [{"text": "Lorem ipsum sjvh hcx bftiyf, hufcil, igfgvjuoigv gvj ifcil ,ghn fgbcggtc yfctgg h vgchbvju."}, {"text": "Lorem ajjgvc wiufcfboitf iujcvbnb hjnkjc ivjhn oikgjvn uhnhgv 09iuvhb oiuvh boiuhb mkjhv mkiuhygv m,khbgv mkjhgv mkjhgv."}, {"text": "Lorem aiv ibveikb jvk igvcib ok blnb v hb b hb bnjb bhb bhn bn vf vbgfc vbgv nbhgv bb nb nbh nj mjhbv mkjhbv nmjhgbv nmkn"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "lorem sivbnogc hbiuygv bnjiuygv bmkjygv nmjhgv"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "Lorem jsvc smc cbd ciecdbbc d vd bcvdvbj obcvb vcibs j dvx"}, {"text": "lore juhgv bnmkiuhygv nmkiuhb mkjiuhb mkjgv mkjhygv nmkjuytfrdc mjhygtfvc mkijuytfc vbnmkjuhygtfv bnmkjuhygtfvc mjhygv mjhgv nmjhuygv bnjhb mnhgv mjhgv njhgv bnjhb njhygvbnjkiuhbhjihbv mjhgbv nmkjhbhnjb njhgv njmkjhbvbh nhgv mbhhnb hjbhu njbhn njb n jjijh bb jiji bi jiijib bkiijij b hggg."}, {"text": "Lorem uhygfv bniuhgv nmkjuhgv nmkijuhygv mkihv bjijnb bnjib bjinb bnjub vgvg bhgfc nhgytredxc ngtfv mkjuygfcv bnmjuygv mjhgv bnmkjhgv njhgv njgfvc."}]
classes = natural_language_classifier.classify_collection('7818d2s519-nlc-1311', reshape).get_result()
print(classes)
And I got a successful response this way.. but that's not very a good way to do it. 而且我以这种方式获得了成功的响应..但这并不是一个很好的方法。 Any solution? 有什么办法吗?
The problem was that json.dumps() was returning <class 'str'>
(json representation) and the input to the classify_collections() required <class 'list'>
. 问题在于json.dumps()返回<class 'str'>
class'str <class 'str'>
(json表示形式),而对classify_collections()的输入要求<class 'list'>
class'list <class 'list'>
。 Hence we don't use json.dumps() here and simply replace
to double quotes(") for the keys and pass <class 'list'>
to the function. 因此,我们在这里不使用json.dumps(),而只是replace
为双引号(“)作为键,并将<class 'list'>
class'list <class 'list'>
传递给函数。
reshape = [{"text" : t} for t in data_df_1["description"]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.