【问题标题】:How do i convert a string array into json jquery?如何将字符串数组转换为 json jquery?
【发布时间】:2016-03-19 11:05:27
【问题描述】:

我用的是Django,返回json对象的视图,代码如下:

def searchTourDBEsp_view(request):
    print 'llamamos search ESP'
    dataTourEsp = TourEsp.objects.raw('SELECT * FROM appMain_tour where idTour=1')
    dataTourEspSer = serializers.serialize("json",dataTourEsp)
    return HttpResponse(json.dumps(dataTourEspSer),content_type='application/json')

如您所见,我必须对数据库查询进行序列化。

在我的模板中,我需要访问返回的数据。

$.ajax({
         type:"POST",
         url:  '{% url "url_searchTourEsp"%}',
         data: data1,             
         success: function(jsonAjaxResult){  
                  console.log("Ajax ok");
                  console.log("nombre");
                  console.log(jsonAjaxResult);   
                  console.log(jsonAjaxResult[0]);  
                                },
                  error: function(data){
                   alert("Got an error, Pleas conctact the Administrator");
                   alert(data);
            }
});

jsonAjaxResult 对象包含我需要的所有信息,但它是一个字符串数组。 jsonAjaxResult的内容如下

[{
"fields":
 {
 "Monday": true, 
 "restrictions": "No kids",
 "name": "Yate Mar", 

 }, 
 "model": "appMain.touresp", 
 "pk": 1
 }]

访问数据的唯一方法是输入

console.log(jsonAjaxResult[0]); 

结果为@​​987654325@

有人知道如何访问以下信息:

jsonAjaxResult['restrictions'];

但是如果我输入这个,结果是undefined

【问题讨论】:

  • jsonAjaxResult[0]['restrictions'] 需要遍历数组,查询每个元素的限制。
  • 如果我写 console.log(jsonAjaxResult[0]['restrictions']);结果未定义

标签: jquery json django


【解决方案1】:

要引用数组中的特定索引,语法为array[index]。要引用对象的属性,语法为object.propertyobject["property"]。由于您的数据结构涉及数组中的嵌套对象,因此只需使用适当的语法来引用每一层的值。

在这种情况下,您的顶级数据类型是数组。该数组包含一个具有名为fields 的属性的对象。反过来,该属性的值是另一个对象,该对象具有自己的属性,名为restrictions。您必须自上而下地引用其中的每一个。

var data = [
    {
        "fields": {
            "Monday": true, 
            "restrictions": "No kids",
            "name": "Yate Mar",
        }, 
        "model": "appMain.touresp", 
        "pk": 1
    }
];

要获取restrictions 属性的值,请执行以下操作:data[0].fields.restrictions

如果您的数组有多个值,并且您希望为每个值获取restrictions,请遍历数组并将0 替换为您的数组索引变量。那就是:

for (var i=0; i < data.length; i++) {
    console.log(data[i].fields.restrictions);
}


编辑:在执行此操作之前,您必须将 JSON 字符串解码为数组。为此使用JSON.parse
JSON.parse(jsonAjaxResult)[0].fields.restrictions

【讨论】:

  • 谢谢你的帮助,我做了你告诉我的,但是下一个错误出现了: Uncaught TypeError: Cannot read property 'restrictions' of undefined The jsonAjaxResult 是一个字符串数组,因为如果我输入 jsonAjaxResult [0] 结果是 '[' 并且如果您遍历该数组,它会显示 '{' , '"' , 'f' , 'i' , 'e' , ........
  • @Matvi 这似乎表明数据的实际结构与您发布的内容略有不同。你能做一个console.log(jsonAjaxResult) 并将记录的内容发布到控制台吗?可能是数据未正确进行 JSON 序列化。
  • @Matvi 哦,明白了。您没有字符串数组。你只有一个字符串,因为你的数据还没有被解码,它被包装成一个字符串。您必须在访问数据之前解析 JSON。请参阅上面的更新。
猜你喜欢
  • 2017-07-20
  • 2015-04-05
  • 2011-11-22
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多