pkaramol
pkaramol

Reputation: 19432

python: Unable to convert string to json

Although the following seems to be a valid json string, I am unable to json.load it.

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)

Upvotes: 0

Views: 1833

Answers (4)

Ramy M. Mousa
Ramy M. Mousa

Reputation: 5943

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))

output:

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

Single quotes outside, double quotes inside incase of strings.

If you have no control over the json string being passed to you, you can use mystr.replace('\'', '"') as mentioned by Vasilis G.

Upvotes: 2

Colton Neary
Colton Neary

Reputation: 90

Followed what Arya commented and got the code to work. Answer can be found in another forum though..

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

json.loads(mystr)

Upvotes: 0

Vasilis G.
Vasilis G.

Reputation: 7859

As both @Austin and @Arya mentioned above, you need to have double quotes in your JSON string to be valid. In your case, you could simply replace the single quote with a double quote:

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

Upvotes: 2

Arya
Arya

Reputation: 1469

You need double quotes inside of the JSON string.

See Parsing string as JSON with single quotes?

The JSON standard requires double quotes and will not accept single quotes, nor will the parser.

Upvotes: 0

Related Questions