JSON
JSON Path Extractor / Flatten
Розгортання вкладеного JSON у плаский список "шлях: значення" (Flatten) і збирання назад у вкладену структуру (Unflatten). Нотація шляху та сама, що й у JSONPath/JSON Diff: store.book[0].price.
Глибоко вкладений JSON складно порівнювати чи перебирати програмно. Flatten розгортає таку структуру в плаский список пар «шлях: значення» (наприклад, store.book[0].price: 12.99), а Unflatten збирає її назад.
Як користуватися
- Flatten: вставте вкладений JSON — отримаєте плаский список усіх кінцевих значень із повним шляхом до кожного.
- Unflatten: вставте список пар «шлях: значення», щоб зібрати з нього вкладену JSON-структуру.
- Нотація шляху та сама, що й у JSONPath та JSON Diff цього сайту — items[0].name для елементів масиву.
Типові сценарії
- Перетворення глибоко вкладеної відповіді API в плаский список для імпорту в таблицю чи систему аналітики.
- Побудова словника перекладів чи конфігурації з плоских ключів (form.errors.email) назад у вкладений JSON.
- Швидкий пошук усіх значень на певну тему в дуже великому JSON-документі через плаский список шляхів.
Що варто памʼятати
Формат позначення індексів масиву різниться між бібліотеками: тут використано items[0], хоча деякі інструменти пишуть items.0 без дужок.
Unflatten вимагає, щоб шляхи не конфліктували між собою (наприклад, one й одночасно one.two) — інакше неможливо однозначно відновити структуру.
Стаття про цей інструмент: JSON Flatten: перетворення вкладеної структури у плаский список
Часті запитання
Для чого потрібне розгортання (flatten) JSON?
Плаский список "шлях: значення" зручний для експорту в таблиці, порівняння значень чи пошуку конкретного поля у великому вкладеному документі без прокрутки структури.
Як позначаються елементи масивів у шляху?
Елементи масиву отримують індексовані ключі у квадратних дужках, наприклад store.book[0].price — це той самий формат нотації, що й у JSONPath та JSON Diff.
Чи завжди Unflatten точно відновлює оригінальну структуру?
Так, якщо шляхи не суперечать одне одному. Якщо два шляхи задають різні типи значень в одній і тій самій точці (наприклад, і об’єкт, і примітив), інструмент повідомить про конфлікт замість того, щоб мовчки щось перезаписати.
Що станеться, якщо реальний ключ сам містить крапку?
Це неоднозначна ситуація: шлях user.name може означати як вкладений об’єкт {"user": {"name": ...}}, так і плаский ключ {"user.name": ...}. Формат нотації з крапками цього не розрізняє, тому такі ключі варто уникати або обробляти окремо.
Чи однаковий формат шляхів у всіх подібних інструментах?
Ні. Крапкова нотація для об’єктів (user.name) поширена практично всюди, а от позначення індексів масиву різниться: тут використано items[0], але деякі бібліотеки пишуть items.0 без дужок.