Українська

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

Чи є ключове значення замовлення в JSON? Замовлення, рівність та RFC 8785

· Підземелля

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

свінгери стандарти введення

Чи є ключове значення замовлення в JSON? Замовлення, рівність та RFC 8785 ілюстрований з JSON токени і точний контрольний ліміт
Головна ToolAcre векторна ілюстрація

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

Самі дані, різні байти

`{"city":"Oslo","temp":4}` і `{"temp":4,"city":"Oslo"}` містять однакові дві імена і значення, але їх джерело байтів відрізняється. Виявлення може додати більше текстових відмінностей без зміни або значення парсованого. Саме тому «equal» JSON” вимагає правила порівняння: ви порівнюєте текст, об'єкти, або канонічне представлення, визначене іншим протоколом?

ToolAcre може видалити білий простір шуму, форматуючи обидва документи з тим самим відступом. Також можна відсвідчити ключі об'єкта, коли вибрано параметр. Сортувати зміни до замовлення навмисно, але ніколи не переміщує масивні елементи, тому що позиція масиву являє собою дані. Незвичайне форматування, але це необов'язкове сортування RFC 8785 канонічний JSON, щоб вихід не був замінений для вказаного формату підписання.

Що RFC 8259 коментує — об’єкт непорядкований збір імені/value пар, і виконання може піддаватися порядку або не

RFC 8259 описує об'єкт як непорядкований збір імені/value пари. Отже, програмне забезпечення, яке лікує порядок учасника як значення звичайного JSON об'єкт спирається на поведінку поза тим, що абстрактна модель. Араси явно замовлені, тому `["draft","final"]` не взаємозамінюється з `["final","draft"]`. Замовлення об'єкта і порядок масиву ніколи не можна нормалізувати тим самим правилом.

Про нас RFC також примітки, що бібліотеки відрізняються тим, чи є вони замовляється від користувачів. Що таке попередження досить для портативного дизайну: не зашифрувати пріоритет або послідовність розміщення одного елемента до іншого. Якщо значення послідовності, що представляють собою масив або явне поле. Форматер, що показує стабільне замовлення, зручний для людини, але він не перетворює позицію в стандартне майно об'єкта.

Що це форматування насправді робить

З відсортуванням вимкнено, ToolAcre підписує документ і серіалізує отриманий JavaScript значення. Вихідний наступний JavaScript Поведінка нерухомості, а не збереження оригінального потоку Token для байтів. Найзвичайніші ключі рядка з'являються в звичному порядку, в той час як імена-індекс-подібних імен можуть бути використані перед іншими іменами. Також можна нормалізувати і втекти під час ресеріалізації.

Увімкнено форматувальник побудує нові об’єкти, власні ключі за алфавітом. Для `{"z":{"b":1,"a":2},"items":[{"d":4,"c":3},"x"]}`, імена об'єктів `items`, `z`; також відсортовані назви об'єктів; і масив все ще містить його об'єкт до `"x"`. Сортування об'єктів всередині масиву не означає сортування самого масиву.

При оформленні замовлення

Текстове замовлення вимагає, коли процес споживає точне байти, а не абстрактне значення. У файлі є ключ кешу, цифровий підпис або лінійні дифузні зміни при переході членів або зміни білого простору. Що не суперечить моделі об'єкта, тобто навколишній процес вибрав байтове представлення в складі його входу. Правила представництва повинні бути чіткими та загальними.

Для рутинних відгуків, послідовне відступання та додаткове алфавітне сортування може зробити зміни простіше бачити. Для криптографічних або протокольних робіт, не є контрактом. Продюсер і вивержувач повинен використовувати точний алгоритм канонізації, необхідний їх протоколом, перш ніж послухати або підписатися. Якщо немає алгоритму, не припустимо ToolAcre’ вихід буде відповідати іншим послідовником по версіях, термінам або значенням краю.

Чому сортування ключів немає RFC 8785

RFC 8785 визначає JSON Схема канонізації для виробництва повторюваних байтів з сумісних даних. Його робота ширше, ніж розміщення ключів в алфавітному порядку. Визначає детермінатичну властивість, сортування разом з точною послідовністю поведінки для рядків і чисел і накладає обмеження на вхідну модель. Симпатичний відступ не входить до складу канонічного виходу, а сортування локальних програм не є прийнятним наближенням.

ToolAcre немає RFC 8785 скарга. Його варіант сорту - це функція читабельності, що прошаровується `JSON.parse` і `JSON.stringify`; не вдається в діюJSON передумови або заміну RFCПравила послідовності. Значення, такі як `1e-7`, ключ, що міститьASCII символи або втечуваний рядок може виявити відмінності між випадковим форматувальником і конформуючим канонізатором. Використовуйте тест JCS виконання JCS потрібно.

Спосіб роботи: порівняння двох документів досить

Порівняти `{"meta":{"rev":2,"owner":"Mira"},"steps":["cut","pack"]}` з `{"steps":["cut","pack"],"meta":{"owner":"Mira","rev":2}}`. Формат як з двома просторами, так і для сортування відключень: білий простір стає послідовним, але кореневими і неприйнятими наказами користувачів можуть відрізнятися. Парсе як і порівняти свої призначені поля для встановлення рівноваги цінного рівня, а не декларування сирого тексту.

Увімкніть рекурсивне сортування ключів і обидва приклади, що поставляються з тим самим замовленням об'єкта, одночасно `steps` Залишки `cut` потім `pack`. Це корисно для людини дифу, але це все ще ToolAcreНормалізація, не RFC 8785 доказ. Якщо другий масив був `["pack","cut"]`, сортування ключів буде вірно залишити, що різниця видима, оскільки зміна масиву змінить представлену послідовність.

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

Вибір ключа не визначає глибинну рівність для кожного додатка. Супутні імена приймаються `JSON.parse`, яка зберігає останнє значення, тому форматування може стирати докази, що одне джерело, що містить повтори. Великі цілі можуть вже втратити прецизію в JavaScript значення. Домен може також обробляти вибрані масиви як набори, але ToolAcre не може заважати, що правило, і тому ніколи не замовляє масиви.

Форматер також не порівнює schemas, застосуйте типові за замовчуванням, нормалізуйте Unicode або вирішіть, чи приймається два ряди для системи Downstream. Відкриті договори Використовуйте форматування, щоб зменшити шум презентації, вбудований структурний порівняння для рівності значення, а також зазначений канонізатор для точного байтів. Змішуючи ті робочі місця під словом «нормалізація» створює хибну впевненість про те, що насправді було порівняно.

Прийняття: замовлення не відрізняється моделі і значним для байтів

Порядок членів об’єкта не несе сенсу в RFC 8259 модель даних, в той час як масивне замовлення. Джерело байтів все ще записує як порядок, так і білий простір, тому має, підписи та текстові дифузори дотримуються відмінностей, які можуть ігнорувати значення. Стан, який має значення шару перед вибором інструмента: текстова ідентичність, номінальна вартість еквівалентності та протоколу, визначена канонічна ідентичність, є трьома різними питаннями.

ToolAcre підтримує перші два робочі процеси тільки непрямо: послідовне форматування чітких текстових відмінностей, а також рекурсивний алфавітний тип-під ключа може зробити порівняння людини більш тихим. Араси ніколи не сортуються. Результат не RFC 8785 канонічний JSON і не повинні бути підписані, якщо це було. Збереження оригінального введення при лексичних доказах, особливо тому, що парсінг дублікатів ключів зберігає тільки останнє значення.