2015-12-14 6 views
1

Im используя Django, вид, который возвращает объект JSON, имеет следующий код:Как преобразовать массив строк в json jquery?

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]); 

, что имеет в результате [

ли кто-то знает, как получить доступ к информации, подобной:

jsonAjaxResult['restrictions']; 

, но если я набираю это значение, результатом будет undefined

+0

'jsonAjaxResult [0] [«ограничения»]' Вы должны перебрать массив и запросить ограничение каждого элемента. –

+0

если я пишу консоль.LOG (jsonAjaxResult [0] [ 'ограничения']); результат неопределен – Matvi

ответ

1

Для ссылки на конкретный индекс в массиве синтаксис равен array[index]. Чтобы ссылаться на свойство объекта, синтаксис равен object.property или object["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); 
} 


EDIT: Вы должны декодировать строку JSON в массив, прежде чем делать это. Используйте JSON.parse для этого:

JSON.parse(jsonAjaxResult)[0].fields.restrictions 
+0

спасибо вам помочь, я сделал то, что вы tould меня, но следующая ошибка появляется: Uncaught TypeError: Не удается прочитать свойство «ограничения» неопределенного The jsonAjaxResult является массив String, потому что, если я type jsonAjaxResult [0] результат: «[», и если вы перебираете этот массив, он показывает «{',' '', 'f', 'i', 'e', ​​........ – Matvi

+0

@ Matvi, похоже, предполагает, что фактическая структура данных немного отличается от того, что вы опубликовали. Можете ли вы сделать «console.log (jsonAjaxResult)» и опубликовать то, что регистрируется на консоли? Возможно, данные были не правильно JSON-сериализован. – nbrooks

+0

@Matvi О, получилось. У вас нет массива строк. У вас есть только одна строка, потому что ваши данные не были декодированы и завернуты в строку. Y Перед доступом к данным придется разбирать JSON. См. Обновление выше. – nbrooks

Смежные вопросы