JSON Toolkit

JSONPath чи JSON Pointer

Головне: JSON Pointer — унікальна адреса, яку можна зберегти як ключ; JSONPath — мова запитів. Неправильний вибір ламає оновлення конфігурації або винаходить зламаний JSONPath.

Середній~4 хв читанняОпубліковано 2026-10-30Оновлено 2026-10-30
Де закінчується JSONPath і починається JSON Pointer

Коротко: використовуйте JSON Pointer, коли треба прочитати, записати чи зберегти адресу одного вузла (наприклад /server/cors/0), і JSONPath, коли треба вибрати набір вузлів за умовою; будь-який збережений шлях має бути Pointer, ніколи вираз.

Запитайте, чи потрібен вам один вузол, чи набір.

В одній таблиці

JSON Pointer JSONPath
Природа Унікальна адреса Вираз запиту
Синтаксис /a/b/0 $.a.b[0], $..price
Результат Рівно один вузол або жодного Нуль або більше вузлів
Зберігається як ключ Так, рядок є ідентичністю Ні, може зіставити багато
Стандарт RFC 6901 RFC 9535 (завершено 2024)

JSON Pointer

/server/host        -> "127.0.0.1"
/server/cors/0      -> "https://a.com"
/                   -> весь документ

Ключі, що містять / або ~, екрануються: ~0 для ~, ~1 для /. Цінність — детермінізм: адреса є рядком, тож уміщується в стовпець бази даних, рядок логу чи ключ конфігурації. JSON Patch (RFC 6902) адресує кожну операцію саме так.

JSONPath

$.store.book[*].author
$..price
$.store.book[?(@.price < 10)]

Ближче до SQL WHERE. Той самий вираз повертає нуль, один чи сотню вузлів залежно від даних.

Два режими збою

Використання JSONPath як ключа конфігурації. Збережіть $.server.port, і одного дня структура стане масивом; вираз тепер зіставляє кілька портів, і логіка оновлення не має способу обрати.

Використання Pointer для вибору. «Знайти кожен вузол, чия ціна менша за 10» неможливо покажчиком. Писати цикл самостійно означає будувати частковий JSONPath.

Як реальні системи поділяють роботу

  • Читання конфігурації, оновлення полів, патчі: Pointer, фіксований і придатний для аудиту
  • Дослідження даних, масове вилучення, звітність: JSONPath, виразність на першому місці
  • Усе збережене: лише Pointer, ніколи вираз

Часті питання

Як обирати між JSON Pointer і JSONPath?

Запитайте, чи потрібен один вузол, чи набір. Використовуйте JSON Pointer, щоб читати чи писати один конкретний вузол і зберегти ту адресу як ключ, бо покажчик унікальний, наприклад /server/cors/0. Використовуйте JSONPath, щоб вибрати вузли за умовою, наприклад $.store.book[?(@.price < 10)].

Чому вираз JSONPath не можна використовувати як ключ конфігурації?

Бо вираз може зіставити кілька вузлів. Збережіть $.server.port, і одного дня структура стане масивом; вираз тоді зіставляє кілька портів, і логіка оновлення не може вирішити, який змінювати. Усе збережене чи призначене для аудиту потребує Pointer.

Чи може JSON Pointer фільтрувати вузли за умовою?

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

Додаткове читання

Відповідні інструменти

Схожі статті

Мова запитів JSONPath на практиці

У 2024 році JSONPath нарешті отримав формальний стандарт, RFC 9535. Ця стаття пояснює синтаксис, семантику фільтрів, функції й історичні відмінності між реалізаціями.

Середній~12 хв читанняОновлено 2026-10-30

JSON Pointer, Patch і Merge Patch

Три короткі специфікації утворюють протокол зміни: Pointer локалізує, Patch редагує точно, Merge Patch зливає частково. Неправильний вибір боляче бʼє по масивах і конкурентності.

Середній~12 хв читанняОновлено 2026-10-30

Часті питання про інструменти: дані, файли й експорт

Чи завантажуються дані, який файл працює, чи щось зберігається локально, чому китайський текст стає escape-послідовностями: десять питань, що промовляють справжні межі онлайн-інструменту JSON.

Початковий~10 хв читанняОновлено 2026-10-30