我正在创建一个Django Web应用程序。 有一个函数可以创建一个像这样的JSON响应:
def rest_get(request, token):
details = Links.get_url(Links, token)
result={}
if len(details)>0:
result['status'] = 200
result['status_message'] = "OK"
result['url'] = details[0].url
else:
result['status'] = 404
result['status_message'] = "Not Found"
result['url'] = None
return JsonResponse(result)
我在网络浏览器中得到的答案如下:
{"status": 200, "url": "http://www.bing.com", "status_message": "OK"}
现在从另一个函数我想要使用该响应并从中提取数据。我该怎么做?
答案 0 :(得分:1)
您可以使用python中的json
库来完成您的工作。例如:
json_string = '{"first_name": "tom", "last_name":"harry"}'
import json
parsed_json = json.loads(json_string)
print(parsed_json['first_name'])
"tom"
您已经创建了一个Web应用程序。我假设您已经公开了一个URL,您可以从中获得JSON响应,例如http://jsonplaceholder.typicode.com/posts/1。
import urllib2
import json
data = urllib2.urlopen("http://jsonplaceholder.typicode.com/posts/1").read()
parsed_json = json.loads(data)
urlopen
函数在给定的URL上发送HTTP GET
请求。 parsed_json
是类型映射的变量,您可以从中提取所需的数据。
print parsed_json['userId']
1
答案 1 :(得分:1)
我想建议的答案有点不同。在你的场景中 - 需要从服务器端和客户端都访问一个功能,我建议提供一些额外的参数并根据它改变输出。这减少了开销和不必要的转换。
例如,如果传入一个额外的参数并像这样更改结果,则不需要在python上进行JSON解析。当然有解决方案可以做到这一点,但为什么需要转换为json
然后解析,当你可以完全避免?
def rest_get(request, token, return_json=True):
details = Links.get_url(Links, token)
result={}
if len(details)>0:
result['status'] = 200
result['status_message'] = "OK"
result['url'] = details[0].url
else:
result['status'] = 404
result['status_message'] = "Not Found"
result['url'] = None
if return_json: # this is web response, so by default return_json = True
return JsonResponse(result)
return result
然后在你的python代码调用中 -
rest_get(request, token, return_json=False): # we are passing False, so the return type is dictionary and we can use it right away.
答案 2 :(得分:0)
您可以在json字符串上使用literal_eval
将其解析为dict。
from ast import literal_eval
#data recieved
responseText = '{"status": 200, "url": "http://www.bing.com", "status_message": "OK"}'
#dict response
response = literal_eval(responseText)
print(response)
# -> {"status": 200, "url": "http://www.bing.com", "status_message": "OK"}
print(response['url'])
# -> http://www.bing.com
literal_eval
是ast
(Abstract Syntax Trees)模块的一部分。你可以用它来:
安全地评估表达式节点或Unicode或Latin-1编码 包含Python文字或容器显示的字符串。字符串或 提供的节点可能只包含以下Python文字 结构:字符串,数字,元组,列表,dicts,布尔值和 无。