Json认为是String

时间:2017-07-06 10:28:35

标签: javascript json django

我正在尝试阅读服务器的响应,它给出了以下JSON:

{"result": "Success", "message": "[{\"model\": \"mysite.userprofile\", \"pk\": 1}, {\"model\": \"mysite.userprofile\", \"pk\": 4}]"}

当我尝试阅读它时,我得到一个字符串。如果我试图解析它是不可能的,因为它给了我

  

位置1的JSON中出现意外的令牌o

这意味着它已经是Json了。

所以这段代码:

$.ajax({
            type: 'POST',
            contentType: 'application/json',
            dataType: 'json',
            url: '/search/?city=&radius=',
            success: function (data) {
                //data = JSON.parse(data);
                var ul = document.getElementById("contact-list");
                console.log("JSON?  "+data.message[0]); // Print [ which is the first char

                for (var x = 0; x < data.message.length; x++){
                     // iterate throw every character in the message
                }

所以在属性('结果'和'消息')中,它显示为有一个String而不是一个Json

这是服务器端:

def search_profiles_by_loc(request):
    if request.method == "POST" and request.is_ajax():
        city = request.POST.get('city', False)
        all_profiles = UserProfile.objects.all()
        response_data = {}
        response_data['result'] = 'Success'
        response_data['message'] = serializers.serialize('json', all_profiles)
        return HttpResponse(JsonResponse(response_data), content_type="application/json")

我尝试过很多无效的事情

2 个答案:

答案 0 :(得分:2)

正如harish-reddy所说,dataType属性将行为设置为您希望响应的行为。也就是说,成功函数的“data”参数已经是一个JavaScript对象。

请参阅http://api.jquery.com/jQuery.ajax/

正如arpit-solanki所说,响应对象中的message属性不是一个数组,而是被解释为一个字符串(注意起始的'“'),因此你要么改变服务器端来发送一个实际的数组,要么就是你必须JSON.parse(data.message)才能获取其内容。

答案 1 :(得分:0)

您收到的响应已由JSON.stringify执行。您必须使用JSON.parse或更改服务器端的逻辑