Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.12.2021, 15:38
Новичок на форуме
Отправить личное сообщение для u015173353@mail.ru Посмотреть профиль Найти все сообщения от u015173353@mail.ru
 
Регистрация: 05.12.2021
Сообщений: 6

обращение к 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, 05.12.2021 в 19:33.
Ответить с цитированием
  #2 (permalink)  
Старый 05.12.2021, 15:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

u015173353@mail.ru,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 05.12.2021, 16:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

u015173353@mail.ru,
строка 110 сравните со строкой 15
Ответить с цитированием
  #4 (permalink)  
Старый 05.12.2021, 18:39
Новичок на форуме
Отправить личное сообщение для u015173353@mail.ru Посмотреть профиль Найти все сообщения от u015173353@mail.ru
 
Регистрация: 05.12.2021
Сообщений: 6

я знаю разницу обращения к ним
обращение к строке 015 a[0].TR[0].TH[0] результат "Номер"
обращение к строке 110 a.TR[0].TH[0] должен быть результат "Номер" но в консоле выдает ошибку
Ответить с цитированием
  #5 (permalink)  
Старый 05.12.2021, 19:31
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,137

Бивас, тест (с)

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])
Ответить с цитированием
  #6 (permalink)  
Старый 05.12.2021, 19:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

u015173353@mail.ru,
массив пропущен в строке 110. сделайте структуру однородной и всё заработает.
Ответить с цитированием
  #7 (permalink)  
Старый 05.12.2021, 19:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

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>
Ответить с цитированием
  #8 (permalink)  
Старый 05.12.2021, 19:42
Новичок на форуме
Отправить личное сообщение для u015173353@mail.ru Посмотреть профиль Найти все сообщения от u015173353@mail.ru
 
Регистрация: 05.12.2021
Сообщений: 6

тоже по началу так проверял срабатывало. но json состоит из 1000 таблиц долго буду искать такие таблицы. прописать в самом js да работает не редактируя можно сделать на проверку существования, но вот с формы index.html из textarea не пашет. путь не существует как бы

Структуру вручную подправил работает)), но как без этих исправлений обращаться к элементам?
a[0].TR[0].TH[0] в первой таблице я могу так все элементы перебрать
a.TR[0].TH[0] аналогично так же должно работать для второй но выходит ошибка не могу найти 0

Последний раз редактировалось u015173353@mail.ru, 05.12.2021 в 20:00.
Ответить с цитированием
  #9 (permalink)  
Старый 05.12.2021, 20:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

Сообщение от u015173353@mail.ru
так же должно
так уберите строку console.log('key=Table содержимое ', a.TR[0].TH[0]); или сделайте её рабочей типа if(a.TR) ... else
Ответить с цитированием
  #10 (permalink)  
Старый 05.12.2021, 20:16
Новичок на форуме
Отправить личное сообщение для u015173353@mail.ru Посмотреть профиль Найти все сообщения от u015173353@mail.ru
 
Регистрация: 05.12.2021
Сообщений: 6

рони,
делал так if(a.TR) тут я определяю что это вторая таблица но когда дальше пытаюсь вытащить данные (например содержимое TH в) a.TR[0] уже выходит ошибка (когда дописываю [0]) "Uncaught TypeError: Cannot read properties of undefined (reading '0')." js уже не находит вложения


с index.html копирую данные json
именно тогда выходит ошибка, когда в js прописываю в переменную почему то работает хотя не вижу разницы откуда брать данные.

Последний раз редактировалось u015173353@mail.ru, 05.12.2021 в 20:19.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при чтении json полученного через ajax ishurgaya Общие вопросы Javascript 7 10.12.2018 09:20
Сериализация форм в json Dtri jQuery 17 07.02.2017 11:42
Не могу распарсить JSON. gorenie jQuery 3 29.11.2013 22:26
JSON или JSONP для запросов на другой сервер? Метод GET, для длинных сообщений? Kotakota jQuery 5 23.08.2011 23:12
jQuery. Обработка ошибок и JSON. mma_mma jQuery 3 19.07.2010 12:10