Python Forum
Return in correct json format - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Return in correct json format (/thread-18287.html)



Return in correct json format - UtiliseIT - May-12-2019

Hi,

Trying to nail my return statement and need to make sure my body message is in correct json format.

My attempt so far

return {
        'statusCode': 200,
        'headers': {'Access-Control-Allow-Origin': '*',
        'Content-Type': 'application/json'},
        'body': {'message': 'Successfully inserted'}
    }
It's only the body part that I haven't got right.

Any assistance is gratefully appreciated

Thanks

Todd


RE: Return in correct json format - DeaD_EyE - May-12-2019

This is a Python dict. The Python dict can converted with json.dumps(your_dict) to a json-string.

If you use flask:

from flask import jsonify

# your code

@app.route('/')
def root():
    message = {
        'statusCode': 200,
        'headers': {'Access-Control-Allow-Origin': '*',
        'Content-Type': 'application/json'},
        'body': {'message': 'Successfully inserted'}
    }
    return jsonify(message)
The jsonify function sets also the right content type in the headers.
Other frameworks have also helpers for this task.


RE: Return in correct json format - UtiliseIT - May-13-2019

Thanks @DeaD_EyE for your response.

Is there a way to do this without having to import anything apart from
import json



RE: Return in correct json format - snippsat - May-13-2019

Can do dumps and loads.
(May-13-2019, 02:10 AM)UtiliseIT Wrote: Is there a way to do this without having to import anything apart from
Yes,but it depend what of you a trying to do.
json dumps and loads.
>>> import json
>>> 
>>> message
{'body': {'message': 'Successfully inserted'},
 'headers': {'Access-Control-Allow-Origin': '*',
             'Content-Type': 'application/json'},
 'statusCode': 200}
>>> d = json.dumps(message)
>>> d
('{"statusCode": 200, "headers": {"Access-Control-Allow-Origin": "*", '
 '"Content-Type": "application/json"}, "body": {"message": "Successfully '
 'inserted"}}')
>>> j = json.loads(d)
>>> j
{'body': {'message': 'Successfully inserted'},
 'headers': {'Access-Control-Allow-Origin': '*',
             'Content-Type': 'application/json'},
 'statusCode': 200}

Most of the time is not needed to make a HTTP message body yourself.
As show with Flask jsonify, it will dumps with mimetype='application/json'.
Same with Requests if eg try to send POST data.
Just send data and the underlying stuff is been take care of,using httpbin can test stuff out.
>>> import requests
>>> from pprint import pprint
>>> 
>>> data = {'sender': 'Alice', 'receiver':'Bob', 'message':'We did it!'}
>>> r = requests.post('http://httpbin.org/post', json=data)
>>> pprint(r.json())
{'args': {},
 'data': '{"sender": "Alice", "receiver": "Bob", "message": "We did it!"}',
 'files': {},
 'form': {},
 'headers': {'Accept': '*/*',
             'Accept-Encoding': 'gzip, deflate',
             'Content-Length': '63',
             'Content-Type': 'application/json',
             'Host': 'httpbin.org',
             'User-Agent': 'python-requests/2.21.0'},
 'json': {'message': 'We did it!', 'receiver': 'Bob', 'sender': 'Alice'},
 'origin': '46.246.117.13, 46.246.117.13',
 'url': 'https://httpbin.org/post'}
>>> 
>>> print(r.text)
{
  "args": {}, 
  "data": "{\"sender\": \"Alice\", \"receiver\": \"Bob\", \"message\": \"We did it!\"}", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "63", 
    "Content-Type": "application/json", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.21.0"
  }, 
  "json": {
    "message": "We did it!", 
    "receiver": "Bob", 
    "sender": "Alice"
  }, 
  "origin": "46.246.117.13, 46.246.117.13", 
  "url": "https://httpbin.org/post"
}