Question

I'm reading in json from a file on a remote server using fabric:

from StringIO import StringIO

output = StringIO()
get(file_name, output)

output = output.getvalue()

The value of output is now:

'"{\\n \\"status\\": \\"failed\\", \\n \\"reason\\": \\"Record already exists.\\"\\n}"'

When I try to parse this string to a dictionary using json.loads(output) its returns the unicode object u'{\n "status": "failed", \n "reason": "Record already exists."\n}' rather than a dictionary.

I've come up with a fairly bad fix, just passing the new unicode object back into json.loads():

json.loads(json.loads(output))

Is there any way other solution to this?

Cheers

Était-ce utile?

La solution

Your data is escaped.

json.loads(output.decode('string-escape').strip('"'))

should give you desired results:

Out[12]: {'reason': 'Record already exists.', 'status': 'failed'}

Autres conseils

The solution here would be to figure out why your file is being doubly JSON encoded in the first place, but given that data passing it through json.loads twice is the right approach.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top