|
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
|
|||||||||||
Eval против JSON.parse11.11.2025, 17:46. Показов 2618. Ответов 78
Метки нет (Все метки)
Сразу скажу, использовал оба метода, переключился на JSON.parse пожалуй больше из соображений более быстрого написания кода на php (хотя и повлияла встреченная где-то фраза, что eval работает медленно).
Но сейчас решил разобраться из чисто теоретического интереса: почему плохо и плохо ли использование eval в таком применении: В php формируется строка типа:
js
0
|
|||||||||||
| 11.11.2025, 17:46 | |
|
Ответы с готовыми решениями:
78
Отловить ошибку в JSON.parse (переварить не JSON) SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
|
|
Супер-модератор
3981 / 2104 / 832
Регистрация: 13.03.2010
Сообщений: 6,926
|
||
| 12.11.2025, 10:28 | ||
Сообщение было отмечено 755 как решение
Решениеeval исполняет код, а не парсит данные. Любая подмена ответа (взлом сервера или БД, XSS, HTTP, прокси/расширения/антивирус, CDN, да что угодно) = произвольный JS в браузере.2. С eval вы сами обязаны правильно экранировать строки, в то время как json_encode делает это корректно "из коробки".3. Аргумент "одна операция вместо двух" неверный: и eval, и JSON.parse парсят строку, только eval ещё и исполняет.4. eval априори медленнее любой "альтернативы".5. Правильным решением будет в PHP сделать echo json_encode($arr, JSON_UNESCAPED_UNICODE);, а в JS const m_el = JSON.parse(xhr.responseText); (ну или fetch(...).then(r=>r.json())).
1
|
||
|
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
|
|
| 12.11.2025, 11:15 | |
|
0
|
|
|
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
|
||||||||||||||||||||||
| 12.11.2025, 11:41 [ТС] | ||||||||||||||||||||||
|
Во-первых, тема создавалась как дискуссионная. В Вашем же ответе не увидел аргументов за или против: • для этого есть JSON (можно и другие форматы) - да, есть. Но и eval c этим справляется. А чем лучше JSON - из ответа не ясно. • п.2. меня также не убедил - по нему выразил ранее свои сомнения. И вот только от gogolik наконец-то прозвучали аргументы против eval. Причем аргументированные. Особенно п.1. Как раз то, что меня изначально и беспокоило. • по п.2 - это делается элементарно. И ошибки легко выявляются при отладке. • по п.3-4. - не совсем так. в php преобразование в строку, которой нет при eval (это и имел виду под первой операцией)
Да, eval выполняет интерпретатор js, поэтому операция будет медленне, чем JSON.parse. Но при нескольких массивов их еще надо разъединить (возможно, я использовал не лучший способ):
И самое на мой взгляд важное: eval работает на стороне клиента, а json_encode на стороне сервера - хотя и в одном и в другом случае не думаю, что время имеет существенное значение. Добавлено через 14 минут Просто отвечаю на вопрос sad67man, чтобы кто-либо не подумал, что спорю или что-то доказываю:
Надеюсь, смог ответить на Ваш вопрос ? Добавлено через 8 минут Да, gogolik, забыл поблагодарить за развернутый ответ и потраченное на него время.
0
|
||||||||||||||||||||||
|
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
|
||
| 12.11.2025, 11:43 | ||
|
json_encode как раз защитит от инъекций и при его помощи легче формировать вложенные объекты.
0
|
||
|
Супер-модератор
3981 / 2104 / 832
Регистрация: 13.03.2010
Сообщений: 6,926
|
|
| 12.11.2025, 11:52 | |
|
755, учитесь сразу делать правильно, а не как попало. Вот основной посыл отвечающих.
0
|
|
|
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
|
|||
| 12.11.2025, 12:08 [ТС] | |||
|
Чисто теоретически: если например таким образом формировать список брендов (когда-то давно, когда только был знаком с php и формировал справочник брендов, в их названиях обнаружил спецсимволы, которые провоцировали ошибки. Но эту проблему тогда легко решил, если не подводит память другой кодировкой строк. Добавлено через 15 минут Не по теме. И увидел Ваш комментарий к данной теме: "Тотальное нежелание учиться, нежелание слушать ..." и решил его прокомментировать. С чего Вы взяли, что у меня отсутствует нежелание учиться - за эти полтора года понимаю, что очень многое узнал, хотя и можно было бы узнать намного больше. И не только узнал, но и стал чувствовать язык при программировании, хотя еще и очень далек до полного, а это уже дается только при практике. А кроме того, возможно, мне уже поздно учиться, вопреки дедушке Ленину и мое предназначение не в программировании и коммерческом проекте, которым сейчас занят, а в некоммерческом (вспоминается фраза "жизнь пронеслась без явного следа, ..."), который мне поэтому кажется интереснее, но которым пока не могу заняться по некоторым причинам.
0
|
|||
|
3847 / 1709 / 431
Регистрация: 14.03.2022
Сообщений: 4,362
|
||||
| 12.11.2025, 12:27 | ||||
|
755, ты шедевральный индивид.
Благо такие встречаются не часто... Я не хотел вступать в полемику, но тут трудно удержаться. ![]() Камрад voraa привел ранее отличную ассоциацию с ПДД. ![]() Вот примерный макет диалога который тут происходит... Новичок (Н) и профи (П). Н - Как лучше делать "так" или "сяк"? П - Не делай "так"! Нужно делать "сяк". Н - Ты меня не убедил... Далее, что бы тебе не писали, следуют утверждения или частные случаи, что с eval тебе все равно нормально будет работать... ![]() Отсюда, присоединяюсь к вопросу ![]() Там все и написано. Добавлено через 12 минут Оно конечно для 755 не аргумент... ![]() Но на мой взгляд вот эта фраза из учебника уже дает правильный посыл
Вот еще статейка https://habr.com/ru/articles/221937 Но только 755 опят напишет, что это все "не его случай"... И ничего убедительно в том для него нет.
1
|
||||
|
131 / 127 / 20
Регистрация: 05.08.2021
Сообщений: 563
|
|
| 12.11.2025, 14:12 | |
|
Про eval все дружно говорят что в серьезных проектах его лучше не использовать. Через него в код можно ввести что-то вредоносное
1
|
|
|
3847 / 1709 / 431
Регистрация: 14.03.2022
Сообщений: 4,362
|
|
| 12.11.2025, 14:58 | |
|
Zloyalex100, дело даже не в этом... Ответ в моей цитате из учебника.
![]() Т.е. просто считайте что никакого eval - нет.И жизнь ваша от этого никак не изменится.
0
|
|
|
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
|
|||||||
| 12.11.2025, 15:06 | |||||||
Вообще я заметил, что именно фулстек-разработчики любят вот так размазывать логику.. часть фронта перекладывать на бэк и наоборот и считают это их преимуществом. Самый ужасный код, с которым мне приходилось сталкиваться как раз был от таких людей.. Что у них творится в голове - одному богу известно.. ну какие-то гениальнейшие загогулины, которые на практике просто невозможно поддерживать.
0
|
|||||||
|
3847 / 1709 / 431
Регистрация: 14.03.2022
Сообщений: 4,362
|
|
| 12.11.2025, 15:41 | |
|
0
|
|
|
420 / 311 / 113
Регистрация: 28.08.2013
Сообщений: 851
|
|
| 13.11.2025, 17:46 | |
|
Использовать eval() крайне не рекомендуется. Потому что eval() парсит строку в код, и его можно выполнить. Что не безопасно.
В JSON-объекте только данные, нет функций, что безопаснее. Более того, если в xmlHttp указать ожидаемый ответ JSON, то браузер вернём объект в xmlHttp.response.
1
|
|
| 14.11.2025, 16:14 | |||||||
|
Добавлено через 2 минуты Ну конечно же, конкретно так мало кто делает, по моим наблюдениям. Скорее так
0
|
|||||||
|
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
|
||
| 13.02.2026, 15:16 [ТС] | ||
|
krvsa, не хотел отвлекаться ранее, но сейчас нашлось время для ответа.
• Он кажется невероятно мощным инструментом для создания самомодифицирующихся файлов в формате JSON, в которых помимо данных хранится функциональность. Например, вы можете создать сервер, который «обучается», проверяя, есть ли нужная вам функциональность ('функциональность' в parsedObject), и если нет, то позволяет клиенту добавить этот метод в объект. Это, в свою очередь, позволяет создавать «живые библиотеки», которые развиваются благодаря тому, что вы обучаете их с помощью сообщений, а не редактируете код. Я не считаю eval чем-то плохим, скорее это самая мощная конструкция в JavaScript. Правда оно было высказано давно, если не ошибаюсь, примерно в 2018 году - возможно, с того времени многое изменилось. Данный текст был также скопирован давно, попытался сейчас открыть ссылку - не открылась - поэтому ее не размещаю. Попадались и другие мнения, типа: надо уметь им пользоваться.
0
|
||
|
3847 / 1709 / 431
Регистрация: 14.03.2022
Сообщений: 4,362
|
|
| 13.02.2026, 15:45 | |
|
755, использовать
eval или нет - все равно решать тебе...Ведь физически ты можешь его использовать пока его совсем не запретят. ![]() Я убиваться по нему не стану. ![]() У меня нет "живых библиотек"... И "самообучающихся серверов"... Я даже не знаю что это такое. Самомодифицирующиеся файлы тоже не делаю... Если у тебя все это есть - то можно поверить тому спецу, раз он утверждает, что без eval такого не добиться.
0
|
|
|
210 / 71 / 18
Регистрация: 29.02.2016
Сообщений: 360
|
||
| 13.02.2026, 16:44 | ||
|
0
|
||
|
3847 / 1709 / 431
Регистрация: 14.03.2022
Сообщений: 4,362
|
||
| 13.02.2026, 16:54 | ||
|
Как ты их не отговаривай... - А кто пробовал съесть стадо?! (с)
0
|
||
|
210 / 71 / 18
Регистрация: 29.02.2016
Сообщений: 360
|
||
| 13.02.2026, 16:58 | ||
|
0
|
||
|
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
|
||
| 13.02.2026, 21:03 [ТС] | ||
|
stele, в данном случае пример был просто как пример того, что кто-то считает eval даже "самой мощной конструкцией" языка. И вполне возможно, что Вы правы о предназначении: "JSON предназначен для передачи данных, а eval для выполнения произвольного кода". Правда у меня при передаче числовых элементов массива JSON сформировал их в js в символьном формате в отличие от eval. Но, думаю, что просто не разобрался и у JSON есть настройки типа данных - пока не стал с этим разбираться - для 1-й версии достаточно и этого.
Но вот, возможно, получится использовать eval согласно спецификации и, если это получится (причем смешно, думаю использовать eval для защиты сайта и данных от проникновения - то, что большинство относят к его недостаткам) то, в отличие от мнения krvsa: Пока же об этом рано говорить - все только на уровне идеи.
0
|
||
|
1294 / 1271 / 190
Регистрация: 21.01.2024
Сообщений: 5,875
|
||
| 13.02.2026, 21:56 | ||
|
Но его не уберут никогда. Он появился в самом начале развития js. А основной принцип внесения изменений в js - "Старый код должен работать". Поэтому из js ничего не убирают. Просто рекомендуют не использовать. Ваш пример просто кошмарен. Сервер (бэк) и браузер (фронт) должны быть максимально независимы друг от друга. Связь только по данным. И программеру бэка не должно быть никакого дела до того, как называются переменные во фронте. Программер фронта, смотря программу через несколько месяцев/лет не должен гадать откуда там взялась неописанная переменная и лезть в программу на сервере, что бы понять это. У всего должна быть своя культура деятельности. И в программировании тоже. Цель не написать, лишь бы сейчас работала, но нужно еще и думать, как это будет сопровождаться, поддерживаться, развиваться, быть может другими людьми, быть может через несколько лет. Чем проще программа, чем дубовее код, тем лучше. Вам это уже много раз объясняли, но бестолку.
2
|
||
| 13.02.2026, 21:56 | |
|
Помогаю со студенческими работами здесь
40
Код 200 SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Ошибка "json.parse unexpected character" Не работает JSON.parse, ошибка Unexpected token o Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|