Reputation: 19432
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
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
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
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
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