Является ли эта строка JSON действительной, и если да, то как получить доступ к вложенным элементам в представлении Django
Я пытаюсь решить проблему, когда я отправляю JSON из jQuery через Ajax().
В этой функции я создаю вложенный массив объектов, прогоняю весь массив через JSON.strigify() и затем отправляю его в мою модель в Django.
Я успешно декодирую строку JSON (без ошибок), но не могу получить доступ к ней или к любой из ее частей. То же самое происходит, если я конвертирую в dict() или list(). Является ли JSON, который я отправляю в представление, действительным для работы с ним в Django, или мне нужно изменить способ его построения, чтобы получить доступ к его значениям.
JQuery Конструирование и отправка массива:
$(document).on('click','#exModel',function () {
const sending = [];
$("table tr").each(function () {
var p1 = $(this).find("th label").html();
var p2 = $(this).find("td input").attr('id');
var p3 = $(this).find("td input").val();
const build = {bnaa:p1,id:p2,vals:p3};
sending.push(build);
});
console.log(sending);
$.ajax({
url: '../coreqc/exModel/',
data: JSON.stringify({'sending':sending}),
type: 'POST',
headers: {'content_type':'application/json','X-CSRFToken': '{{ csrf_token }}'},
async: 'true',
success: function (data) {
console.log("I made it back")
//dom: 'Bfrtip',
}
});
});
Массив отправляется в мое представление в Django. В консоли браузера, когда я веду лог перед отправкой, это выглядит так:
[{bnaa: "Product 1:", id: "1", vals: ""}, {bnaa: "Product 2:", id: "2", vals: ""}, {bnaa: "Product 3:", id: "3", vals: ""}, {bnaa: "Product 4:", id: "4", vals: ""}, {bnaa: "Product 5:", id: "5", vals: ""}, {bnaa: "Product 6:", id: "6", vals: ""}, {bnaa: "Product 7:", id: "7", vals: ""}, {bnaa: "Product 8:", id: "8", vals: ""}, {bnaa: "Product 9:", id: "9", vals: ""}, {bnaa: "Product 10:", id: "10", vals: ""}]
Когда я декодирую его с помощью json.loads(), я не могу распаковать значения. Я могу вывести все, если я превращу его в словарь, то смогу отобразить все элементы. Я просто не могу получить ключи и значения.
@csrf_protect
def exModel(request):
data = request.body
data = json.loads(request.body)
print(data)
template = loader.get_template('coreqc/tester.html')
context = {
'data':data
}
return HttpResponse(template.render(context, request))
Когда я печатаю данные выше, я получаю в терминале следующее:
{'sending': [{'bnaa': 'Product 1:', 'id': '1', 'vals': ''}, {'bnaa': 'Product 2:', 'id': '2', 'vals': ''}, {'bnaa': 'Product 3:', 'id': '3', 'vals': ''}, {'bnaa': 'Product 4:', 'id': '4', 'vals': ''}, {'bnaa': 'Product 5:', 'id': '5', 'vals': ''}, {'bnaa': 'Product 6:', 'id': '6', 'vals': ''}, {'bnaa': 'Product 7:', 'id': '8', 'vals': ''}, {'bnaa': 'Product 9:', 'id': '8', 'vals': ''}, {'bnaa': 'Product 9:', 'id': '9', 'vals': ''}, {'bnaa': 'Product 10:', 'id': '10', 'vals': ''}]}
Я перепробовал все возможные способы зацикливания переменной 'data', но, кроме как сбросить ее целиком, не могу получить доступ к вложенным элементам в 'sending', что заставляет меня сомневаться в способе отправки.