python:无法将字符串转换为json

rfbsl7qr  于 2023-01-14  发布在  Python
关注(0)|答案(4)|浏览(223)

尽管下面的字符串看起来是有效的json字符串,但我无法对其进行json.load

In [33]:  mystr="{ 'username': 'Newman Test Executor', 'channel': '#someslackchannel' }"

In [34]: json.loads(mystr)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-34-6f4efa0d20c6> in <module>()
----> 1 json.loads(mystr)

/usr/lib/python2.7/json/__init__.pyc in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
    337             parse_int is None and parse_float is None and
    338             parse_constant is None and object_pairs_hook is None and not kw):
--> 339         return _default_decoder.decode(s)
    340     if cls is None:
    341         cls = JSONDecoder

/usr/lib/python2.7/json/decoder.pyc in decode(self, s, _w)
    362 
    363         """
--> 364         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    365         end = _w(s, end).end()
    366         if end != len(s):

/usr/lib/python2.7/json/decoder.pyc in raw_decode(self, s, idx)
    378         """
    379         try:
--> 380             obj, end = self.scan_once(s, idx)
    381         except StopIteration:
    382             raise ValueError("No JSON object could be decoded")

ValueError: Expecting property name: line 1 column 3 (char 2)
yzckvree

yzckvree1#

正如上面提到的@Austin和@Arya一样,JSON字符串中需要有双引号才有效。在本例中,只需将单引号替换为双引号即可:

import json
mystr="{ 'username': 'Newman Test Executor', 'channel': '#someslackchannel' }"
json.loads(mystr.replace('\'','"'))
mzsu5hc0

mzsu5hc02#

import json
mystr = '{ "username": "Newman Test Executor", "channel": "#someslackchannel" }'
my_dict = { "username": "Newman Test Executor", "channel": "#someslackchannel" }


print(json.loads(mystr))
print(json.dumps(my_dict))

输出:

{u'username': u'Newman Test Executor', u'channel': u'#someslackchannel'}
{"username": "Newman Test Executor", "channel": "#someslackchannel"}

外有单引号,内有双引号(如果是字符串)。
如果您无法控制传递给您的json string,可以使用**Vasilis G.**提到的mystr.replace('\'', '"')

hk8txs48

hk8txs483#

JSON字符串中需要双引号。
参见Parsing string as JSON with single quotes?
JSON标准要求双引号,不接受单引号,解析器也不接受。

5q4ezhmt

5q4ezhmt4#

按照Arya的评论,并得到了代码的工作。答案可以在另一个论坛找到虽然。

import json
mystr='{ "username": "Newman Test Executor","channel": "#someslackchannel"}'

json.loads(mystr)

相关问题