Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-解析JSONP(带填充的Json)_Python_Django_Jsonp - Fatal编程技术网

Python Django-解析JSONP(带填充的Json)

Python Django-解析JSONP(带填充的Json),python,django,jsonp,Python,Django,Jsonp,我正在使用JSONP将数据从otherdomain.com发送到mydomain.com from django.http import JsonResponse import json def decode_jsonp(request): if 'callback' in request.GET: json_object = json.loads(request.body) # Raise error json_object = json.dumps

我正在使用JSONP将数据从
otherdomain.com
发送到
mydomain.com

from django.http import JsonResponse
import json

def decode_jsonp(request):

    if 'callback' in request.GET:
        json_object = json.loads(request.body) # Raise error
        json_object = json.dumps(request.body) # Do not raise error but returns nothing
        json_object = json.loads(json.dumps(request.body)) # Raise error

        foo = json_object['foo']

    return JsonResponse({'foo': foo})
然而,当我试图在django控制器(
views.py
)中解析JSONP数据时,我犯了错误

这是我的密码


mydomain.com
客户端页面中的Javascript

jsonData = {
    'foo': 'bar',
}

$.ajax({
    url: 'http://otherdomain.com/end_point/',
    type: 'GET',
    contentType: 'application/json; charset=utf-8',
    data: jsonData,
    dataType : 'jsonp',
    jsonp : 'callback'
});

mydomain.com

from django.http import JsonResponse
import json

def decode_jsonp(request):

    if 'callback' in request.GET:
        json_object = json.loads(request.body) # Raise error
        json_object = json.dumps(request.body) # Do not raise error but returns nothing
        json_object = json.loads(json.dumps(request.body)) # Raise error

        foo = json_object['foo']

    return JsonResponse({'foo': foo})

我不知道应该用什么来代替
json\u object=json.loads(request.body)

一个JSONP对象周围有括号和回调。但是Python的
json
模块不能识别JSONP对象。因此,您必须首先通过删除周围的括号和回调名称将其转换为JSON对象

范例

>>> data = 'callback({"key": "val"})' # a common JSONP object
>>>
>>> json.loads(data)
# raises ValueError
>>>
>>> data_json = data.split("(", 1)[1].strip(")") # convert to json
>>> data_json
'{"key": "val"}' 
>>>
>>> json.loads(data_json)
# success

JSONP对象周围有括号和回调。但是Python的
json
模块不能识别JSONP对象。因此,您必须首先通过删除周围的括号和回调名称将其转换为JSON对象

范例

>>> data = 'callback({"key": "val"})' # a common JSONP object
>>>
>>> json.loads(data)
# raises ValueError
>>>
>>> data_json = data.split("(", 1)[1].strip(")") # convert to json
>>> data_json
'{"key": "val"}' 
>>>
>>> json.loads(data_json)
# success

谢谢@xyres。这是解决办法

def decode_jsonp(request):

    if 'callback' in request.GET:
        query_string = request.GET.urlencode()
        json_object = {x.split('=')[0]:str(x.split('=')[1]) for x in query_string.split("&")}

        foo = json_object['foo']

    return JsonResponse({'foo': foo})

谢谢@xyres。这是解决办法

def decode_jsonp(request):

    if 'callback' in request.GET:
        query_string = request.GET.urlencode()
        json_object = {x.split('=')[0]:str(x.split('=')[1]) for x in query_string.split("&")}

        foo = json_object['foo']

    return JsonResponse({'foo': foo})

你们得到了什么错误?我在客户端页面得到了500个内部服务器错误,但它的响应是空的。我以调试模式运行django。我在uWSGI日志中找不到错误。您得到了什么错误?我在客户端页面得到了500个内部服务器错误,但其响应为空。我以调试模式运行django。我在uWSGI日志中找不到错误。谢谢!你的回答是解决我问题的关键。我在下面发布了解决方案。如果你的json中有
),结果是错误的。你应该使用
数据。split(“(”,1)
@Daniel感谢你指出这一点。我已经相应地更新了代码。谢谢!你的答案是解决我问题的关键。我在下面发布了解决方案。如果你有
在您的json中,结果是错误的。您应该使用
data.split(“(”,1)
@Daniel感谢您指出这一点。我已经相应地更新了代码。