How to convert string data to a JSON object in python?

Here is an example of a line that I get from one of the web services,

body=%7B%22type%22%3A%22change%22%2C%22url%22%3A%22http%3A%2F%2Fapi.pachube.com%2Fv2%2Ftriggers%2F4100%22%2C%22environment%22%3A%7B%22feed%22%3A%22http%3A%2F%2Fapi.pachube.com%2Fv2%2Ffeeds%2F36133%22%2C%22title%22%3A%22Current+Cost+Bridge%22%2C%22description%22%3Anull%2C%22id%22%3A36133%7D%2C%22threshold_value%22%3Anull%2C%22timestamp%22%3A%222012-01-05T09%3A27%3A01Z%22%2C%22triggering_datastream%22%3A%7B%22url%22%3A%22http%3A%2F%2Fapi.pachube.com%2Fv2%2Ffeeds%2F36133%2Fdatastreams%2F1%22%2C%22value%22%3A%7B%22value%22%3A%22523%22%2C%22max_value%22%3A1269.0%2C%22min_value%22%3A0.0%7D%2C%22id%22%3A%221%22%2C%22units%22%3A%7B%22symbol%22%3A%22W%22%2C%22type%22%3A%22derivedUnits%22%2C%22label%22%3A%22watts%22%7D%7D%2C%22id%22%3A4100%7D 

Here is the code

 class Feeds(): def GET(self): print "Get request is accepted." return render.index(None) def POST(self): print "Post request is accepted." print (web.data()) 

Now that this web service publishes the above data, how can I convert it to a readable format? Then I need to convert it to a JSON object and use it further. So how do I transform it?

When I try this code,

  json_data = json.loads(web.data()) print json_data['body'] return render.index(json_data['body']) 

It gives me an error

 enter code Traceback (most recent call last): File "/usr/local/lib/python2.6/dist-packages/web/application.py", line 237, in process return self.handle() File "/usr/local/lib/python2.6/dist-packages/web/application.py", line 228, in handle return self._delegate(fn, self.fvars, args) File "/usr/local/lib/python2.6/dist-packages/web/application.py", line 409, in _delegate return handle_class(cls) File "/usr/local/lib/python2.6/dist-packages/web/application.py", line 385, in handle_class return tocall(*args) File "/home/ubuntu/pachubeConsumer/src/controllers/feeds.py", line 17, in POST json_data = json.loads(web.data()) File "/usr/lib/python2.6/json/__init__.py", line 307, in loads return _default_decoder.decode(s) File "/usr/lib/python2.6/json/decoder.py", line 319, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib/python2.6/json/decoder.py", line 338, in raw_decode raise ValueError("No JSON object could be decoded") ValueError: No JSON object could be decoded here 

Where am I mistaken?

Thanks in advance.

+6
source share
3 answers

First you need to cancel the body survey

 import urllib body="%7B%22type%22%3A%22change%22%2C%22url%22%3A%22http%3A%2F%2Fapi.pachube.com%2Fv2%2Ftriggers%2F4100%22%2C%22environment%22%3A%7B%22feed%22%3A%22http%3A%2F%2Fapi.pachube.com%2Fv2%2Ffeeds%2F36133%22%2C%22title%22%3A%22Current+Cost+Bridge%22%2C%22description%22%3Anull%2C%22id%22%3A36133%7D%2C%22threshold_value%22%3Anull%2C%22timestamp%22%3A%222012-01-05T09%3A27%3A01Z%22%2C%22triggering_datastream%22%3A%7B%22url%22%3A%22http%3A%2F%2Fapi.pachube.com%2Fv2%2Ffeeds%2F36133%2Fdatastreams%2F1%22%2C%22value%22%3A%7B%22value%22%3A%22523%22%2C%22max_value%22%3A1269.0%2C%22min_value%22%3A0.0%7D%2C%22id%22%3A%221%22%2C%22units%22%3A%7B%22symbol%22%3A%22W%22%2C%22type%22%3A%22derivedUnits%22%2C%22label%22%3A%22watts%22%7D%7D%2C%22id%22%3A4100%7D" unquoted = urllib.unquote(body) 

Then just load the JSON as usual,

 import json pythonDict = json.loads(unquoted) 
+10
source

you need to cancel the query string first using urllib.unquote()

 import urllib unescaped = urllib.unquote(web.data()) 

then you can use json.loads to convert it to json.

 json_data = json.loads(unescaped) 
+7
source

Python 3 urllib unquote go to analysis:

 from urllib import parse parse.unquote(web.data()) 
+1
source

Source: https://habr.com/ru/post/905178/


All Articles