обращение к JSON
Доброго времени суток. не пойму в чем причина не могу обратиться к элементам json.
Имею на странице index.html <textera id='text'> { "TaggedPDF": { "Part": [ { "H3": "Раздел", "Sect": { "Sect": [ { "H4": "Таблица", "P": [ "Состав", "тип" ], "Table": [ { "TR": [ { "TH": [ "Номер", "Наименование", "Ед. изм.", "101", "102", "103", "104" ] }, { "TH": [ "100", "Затраты", "ч" ], "TD": [ "154", "185", "227", "0,319" ] }, { "TH": [ "0101", "разряд", "-" ], "TD": [ "3,8", "3,8", "3,8", "3,8" ] }, { "TH": [ "0100", "Затраты", "ч" ], "TD": [ "0,8", "0,965", "0,175", "0,66" ] }, { "TH": [ "", "МЕХАНИЗМЫ", "" ], "TD": [ "", "", "", "" ] }, { "TH": "0302", "TD": [ "Топор", "ч", "16", "193", "235", "332" ] }, { "TH": "0204", "TD": [ "Молоток", "ч", "16", "193", "235", "332" ] } ] } ] }, { "H4": "Таблица", "P": "Состав", "Table": { "TR": [ { "TH": [ "Номер", "Наименование", "Ед. изм.", "701" ] }, { "TD": [ "0100", "Затраты", "ч", "71" ] }, { "TD": [ "", "МЕХАНИЗМЫ", "", "" ] }, { "TD": [ "0102", "Молоток", "ч", "71" ] } ] } } ] } } ] } } </textera> через валидотор проверил json все в норме обрабатываю данные так через script.js window.onload = parse; // при загрузке function line(a){ console.log ('key=Table содержимое ', a); // рабочий вариант в 2х таблицах console.log('key=Table содержимое ', a.TR[0].TH[0]); // для второй таблицы должно работать но нет ошибка Uncaught TypeError: Cannot read properties of undefined (reading '0') } function traverse(jsonObj){ if (jsonObj !== null && typeof jsonObj == "object" ) { // проверка на объект Object.entries(jsonObj).forEach(([key, value]) => { // перебираем таблицы ключ значение if (key=="Table") { //если ключ равняется Table line(value); // обрабатываем дальше } traverse(value); // перебор вложения }); } } function parse() { let obj = JSON.parse(document.getElementById('text').value); traverse(obj.TaggedPDF.Part[0].Sect.Sect); // выбираю нужную часть json } обращение ко всем элементам в line(a) для первой таблицы проходит успешно, в ручную могу обращаться ко всем элементам а вот ко второй таблице не получается обращаться к элементам a.TR[0] и далее (.TH[0]) максимум отображает до a.TR после ошибка Uncaught TypeError: Cannot read properties of undefined (reading '0') |
u015173353@mail.ru,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
u015173353@mail.ru,
строка 110 сравните со строкой 15 |
я знаю разницу обращения к ним
обращение к строке 015 a[0].TR[0].TH[0] результат "Номер" обращение к строке 110 a.TR[0].TH[0] должен быть результат "Номер" но в консоле выдает ошибку |
Бивас, тест (с)
const o = { "TaggedPDF": { "Part": [ { "H3": "Раздел", "Sect": { "Sect": [ { "H4": "Таблица", "P": [ "Состав", "тип" ], "Table": [ { "TR": [ { "TH": [ "Номер", "Наименование", "Ед. изм.", "101", "102", "103", "104" ] }, { "TH": [ "100", "Затраты", "ч" ], "TD": [ "154", "185", "227", "0,319" ] }, { "TH": [ "0101", "разряд", "-" ], "TD": [ "3,8", "3,8", "3,8", "3,8" ] }, { "TH": [ "0100", "Затраты", "ч" ], "TD": [ "0,8", "0,965", "0,175", "0,66" ] }, { "TH": [ "", "МЕХАНИЗМЫ", "" ], "TD": [ "", "", "", "" ] }, { "TH": "0302", "TD": [ "Топор", "ч", "16", "193", "235", "332" ] }, { "TH": "0204", "TD": [ "Молоток", "ч", "16", "193", "235", "332" ] } ] } ] }, { "H4": "Таблица", "P": "Состав", "Table": { "TR": [ { "TH": [ "Номер", "Наименование", "Ед. изм.", "701" ] }, { "TD": [ "0100", "Затраты", "ч", "71" ] }, { "TD": [ "", "МЕХАНИЗМЫ", "", "" ] }, { "TD": [ "0102", "Молоток", "ч", "71" ] } ] } } ] } } ] } } alert(o.TaggedPDF.Part[0].Sect.Sect[0].Table[0].TR[0].TH[0]) alert(o.TaggedPDF.Part[0].Sect.Sect[1].Table.TR[0].TH[0]) |
u015173353@mail.ru,
массив пропущен в строке 110. сделайте структуру однородной и всё заработает. |
u015173353@mail.ru,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <textarea id='text'> { "TaggedPDF": { "Part": [ { "H3": "Раздел", "Sect": { "Sect": [ { "H4": "Таблица", "P": [ "Состав", "тип" ], "Table": [ { "TR": [ { "TH": [ "Номер", "Наименование", "Ед. изм.", "101", "102", "103", "104" ] }, { "TH": [ "100", "Затраты", "ч" ], "TD": [ "154", "185", "227", "0,319" ] }, { "TH": [ "0101", "разряд", "-" ], "TD": [ "3,8", "3,8", "3,8", "3,8" ] }, { "TH": [ "0100", "Затраты", "ч" ], "TD": [ "0,8", "0,965", "0,175", "0,66" ] }, { "TH": [ "", "МЕХАНИЗМЫ", "" ], "TD": [ "", "", "", "" ] }, { "TH": "0302", "TD": [ "Топор", "ч", "16", "193", "235", "332" ] }, { "TH": "0204", "TD": [ "Молоток", "ч", "16", "193", "235", "332" ] } ] } ] }, { "H4": "Таблица", "P": "Состав", "Table": [{ "TR": [ { "TH": [ "Номер", "Наименование", "Ед. изм.", "701" ] }, { "TD": [ "0100", "Затраты", "ч", "71" ] }, { "TD": [ "", "МЕХАНИЗМЫ", "", "" ] }, { "TD": [ "0102", "Молоток", "ч", "71" ] } ] }] } ] } } ] } } </textarea> <script> window.onload = parse; // при загрузке function line(a){ // console.log ('key=Table содержимое ', a); // рабочий вариант в 2х таблицах console.log('key=Table TR ', a[0].TR); // для второй таблицы должно работать но нет } function traverse(jsonObj){ if (jsonObj !== null && typeof jsonObj == "object" ) { // проверка на объект Object.entries(jsonObj).forEach(([key, value]) => { // перебираем таблицы ключ значение if (key=="Table") { //если ключ равняется Table line(value); // обрабатываем дальше } traverse(value); // перебор вложения }); } } function parse() { let obj = JSON.parse(document.getElementById('text').value); traverse(obj.TaggedPDF.Part[0].Sect.Sect); // выбираю нужную часть json } </script> </body> </html> |
тоже по началу так проверял срабатывало. но json состоит из 1000 таблиц долго буду искать такие таблицы. прописать в самом js да работает не редактируя можно сделать на проверку существования, но вот с формы index.html из textarea не пашет. путь не существует как бы
Структуру вручную подправил работает)), но как без этих исправлений обращаться к элементам? a[0].TR[0].TH[0] в первой таблице я могу так все элементы перебрать a.TR[0].TH[0] аналогично так же должно работать для второй но выходит ошибка не могу найти 0 |
Цитата:
|
рони,
делал так if(a.TR) тут я определяю что это вторая таблица но когда дальше пытаюсь вытащить данные (например содержимое TH в) a.TR[0] уже выходит ошибка (когда дописываю [0]) "Uncaught TypeError: Cannot read properties of undefined (reading '0')." js уже не находит вложения с index.html копирую данные json именно тогда выходит ошибка, когда в js прописываю в переменную почему то работает хотя не вижу разницы откуда брать данные. |
Часовой пояс GMT +3, время: 00:52. |