Українська

Інструменти розробника · JSON форматування & реаніматор

JavaScript об'єктні літри проти JSON: чому одиночні котирування не діють

· Як працює

Опубліковано ToolAcre · Редакція журналу

свінгери розробник-workflow введення

JavaScript об'єктні літри проти JSON: чому одиночні лапки не втілюються з ілюстраціями JSON токени і точний контрольний ліміт
Головна ToolAcre векторна ілюстрація

Об'єкт, надрукований об'єктом JavaScript консоль виглядає як JSON але зазвичай немає. Цей запис містить певні відмінності (цити, невидимі ключі, невизнані, функції) і показує, де кожен з них проходить дійсний.

Він вийшов з консолі, тому чому це недійсним?

Він вийшов з консолі, тому чому це недійсним? — демонстрація консолі розробника JavaScript значення як JavaScript вихідний текст, не гарантується JSON послідовність. Цей об'єкт може містити імена майна, одноцитові рядки, `undefined` або налаштування веб-переглядача. Всі вони можуть бути зрозумілими JavaScript двигун або людина зчитувач при відмові негайно `.json` файл, граматика якого навмисно менша і незалежно від виконуваного коду.

Розгляд `{name: "Ada", active: true, missing: undefined}`. Брекети, товста кишка і булева JSON, але першим ключем лева вже порушує правило об'єкта, і `undefined` не пізніше. ToolAcre звітує про перший непідтримний характер або значення з рядком і стовпцем, тому перетворення краще робиться в порядку.

Рядки повинні використовувати подвійні лапки

Рядки повинні використовувати подвійні котирування — JSON визначає рядок як символи, укладені за допомогою `"`, з задньою втечу, де потрібно. Єдина цитата не має ролі як рядок delimiter. Коли реактиватор відповідає `'Ada'`, він не починає рядок, а потім об'єкт до його вмісту; він відхиляє від відкриття апотрофії себе. Це стосується однакових імен і значень рядків, навіть якщо JavaScript дозволяє цитувати стиль для власних літрів.

Перетворення котирування вимагає більшого догляду, ніж глобально заміняє кожен апотроф. Апостроф в тексті, такі як `Ada's profile` Цей сайт використовує файли cookie, щоб надати вам кращий веб-сайт. Дійсно JSON форма `"Ada's "profile""`.

Ключі повинні бути процитовані рядки

Ключі повинні бути процитовані рядки - JavaScript знаки об'єкта дозволяють іменувати ідентифікатори, такі як `{name: 1}` і комп'ютерні імена, такі як `{[expression]: 1}`. JSON не вкорочена. Після відкриття латуні або коми, наступний учасник повинен почати з подвійної цитати, а потім по колонці. Реальне представництво `{"name": 1}`. Реактор, який вказує на `n` Визначаємо точне місце, де потрібно цитувати.

Ми можемо самі зателефонувати одержувачу. JavaScript може знадобитися різні джерела синтаксису для тих випадків, але JSON використовує одне послідовне правило: `"display-name"`, `"first name"` і `"default"` є іменами звичайних членів. Numeric-looking keys are strings занадто.

Вартість JSON просто не має

Вартість JSON просто не має значення — це об'єкт, масив, рядок, номер, `true`, `false` і `null`. Немає `undefined`, `NaN`, `Infinity`, функція, регулярний вираз, BigInt або дата л. Коментарі відсутні з граматики, а цифри не можуть використовувати шексадектермальні, бінарні, провідні плюсові знаки або JavaScript нумерні сепаратори. Кожен запозичений конструктор в кінцевому підсумку досягає символу, який не може розпочати або продовжити дійсність JSON значення.

Перетворення вимагає прийняття даних, а не прописання. Зареєструватися `undefined` з `null` тільки якщо явного порожнього значення відповідає угоді про застосування; в іншому випадку видалення учасника або надання реальної вартості. Закодувати дати як узгоджені рядки, часто ISO 8601. Представляємо нефіцитні номери згідно з отриманням API замість проходу JSON токен.

Розроблений приклад: перетворення консольного сміття в дійсний JSON

Розроблений приклад: перетворення консольного сміття в дійсний JSON — початок `{name: 'Ada', active: true, score: NaN, updated: new Date()}`. Цитувати `name`, `active`, `score` і `updated` з двома лапками. Зміна значення назви до подвійної цитати. Визначте, що обліковий запис не потрібно `null`, і замініть вираз конструктора з фактичним часовим рядком, призначеним для виробництва. Цей документ містить лише JSON членів та значень.

Готова форма може бути `{"name":"Ada","active":true,"score":null,"updated":"2026-03-21T10:00:00Z"}`. Дійсно після кожної категорії ремонту, оскільки перша помилка може приховатися пізніше JavaScript-тільки синтаксис. Форматування прийнятого результату, після чого його структура не виконує подальше перетворення.

Зворотний пастка — дійсний JSON що JavaScript читати по-різному, такі як дуже великі цілі та ключ proto

Зворотний пастка — дійсний JSON ще можна придбати JavaScript-специфічна поведінка або обмеження після парсингу. JSON число не мають вбудованого обмеження точності граматики, але JSON.parse виробництво JavaScript Кількість значень. Ціль за межами безпечного діапазону можна закруглити безшумно. Якщо кожна цифра має значення, кодуйте ідентифікатор як рядок або скористайтеся парсером та типом даних, призначеним для збереження довільно-точних чисел, а не довіряє успішну перевірку синтаксису.

Назва учасника `"__proto__"` також діє JSON і JSON.parse створює власні дані. Почати можна пізніше, якщо код заявки копіюється нанесені властивості в інший об'єкт з небезпечним призначенням або зливом поведінки. Перевірка доводить, що текст слід JSON граматика; не доведе, що кожен ключ безпечний для кожного споживача.

Що це не криється

Що це не криється — JSON5, JSONC і конфігурація мов, які свідомо приймають коментарі, причепивши коми, неможливі імена або одноцитні рядки. Ці формати розв’язують різні проблеми авторизації і потребують сердечок, які реалізують власні граматики. Швидке JSON Активатор не повинен мовчати їх, оскільки прийняття додаткових синтаксису призведе до введення в оману для API, пакетних метаданих та інших цілей, які дійсно вимагають стандартного JSON.

Ця відмінність також виключає довільний JavaScript оцінка. Запущений текст через `eval` або Конструктор функції, щоб перетворити об'єкт на дані, може виконувати getters, дзвінки або інші вирази хостійкості. Якщо джерело довіряється JavaScript під керуванням, засвідчує фактичне значення з JSON.stringify. Якщо джерело не довірений текст, не виконує його.

Takeaway: літровий код, JSON Дані

Takeaway: літровий код, JSON — дані — візуальна схожість не робить своїх граматики взаємозамінними. JSON вимагає подвійних міток і імен користувачів, дозволяє лише невеликий фіксований набір типів значень і не містить коментарів або виконуваних виразів. Лінійно-жовтий діагностичні позначки першого місця копійовані джерела листя, що граматика. Ремонт цієї точки і валідації знову є більш надійним, ніж застосування широкого пошуку і перезаміни в консольний відвал.

Коли ви контролюєте JavaScript значення, генерувати JSON з JSON.stringify замість копіювання його списку консолі. Коли ви отримуєте текст, поставте його тільки з парсером для його заявленого формату і ніколи не виконавши його як ярлик. Успішний JSON Усиновлення встановлює синтаксису, що не є числовою точністю, schema conformance або безпечне управління потоком.