JSON Path Editor

Get, set, or delete a value at a dotted or bracketed path in a JSON document — array indices, quoted keys, and auto-created intermediate objects. Runs entirely in your browser, no server, no sign-up.

Try:
Result

About this tool

JSON Path Editor reads and edits a single value inside a JSON document by its path — no need to hand-edit brackets and commas. Pick an operation, point at a path, and get back either the value there (get) or the whole modified document (set / delete). Everything runs locally in your browser: your JSON is never uploaded.

Paths use the familiar lodash / dot-object style (not RFC 9535 JSONPath):

Worked example

Given this document:

{"store":{"book":[{"title":"A","price":5},{"title":"B","price":12}]}}

Setting values

For set, the value field is parsed as JSON: 42 becomes a number, true a boolean, null a null, and {"k":1} an object. If it isn't valid JSON it's stored as a plain string, so a bare hello becomes "hello". To force text that looks like JSON to stay a string, wrap it in quotes — e.g. "true" sets the string true, not the boolean.

set creates missing intermediates: setting user.address.city on {} builds the nested objects for you, and a numeric segment such as list[2] creates an array (padding earlier slots with null).

Limits & edge cases

FAQ

What path syntax does this use — is it JSONPath?

No. It uses lodash / dot-object notation: dot segments (a.b.c), array indices as brackets or dotted digits (a[0] is the same as a.0), and quoted keys for keys containing a dot, bracket, or space (["a.b"].c). This targets one value at a time. For RFC 9535 JSONPath queries with wildcards, slices, recursive descent, and filters, use a dedicated JSONPath query tool instead.

How do I set a value that looks like JSON but should stay a string?

Wrap it in quotes. The value field is parsed as JSON first, so true, 42, and null become a boolean, number, and null. Typing "true" (with the quotes) stores the string true. A bare word that isn't valid JSON, like hello, is already treated as the string "hello".

Will `set` create missing objects and arrays along the path?

Yes. Setting user.address.city on {} creates the user and address objects automatically. A numeric segment creates an array — items[2] builds a three-element array padded with null. What it will not do is overwrite an existing scalar: if a is already 5, setting a.b errors instead of destroying the 5.

What happens if the path doesn't exist?

For get and delete, a missing key or an out-of-range array index is an error with a message that says which segment failed — so a typo surfaces immediately rather than silently doing nothing. For set, a missing path is the normal case: it's created.

Is my JSON uploaded anywhere?

No. The whole tool runs as WebAssembly inside your browser tab. Your JSON document never leaves your device, so it's safe to use with private or sensitive data.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool json-path-edit '{"store":{"book":[{"title":"A","price":5}]}}' 'path=store.book[0].title'

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/json-path-edit/?json=%7B%22store%22%3A%7B%22book%22%3A%5B%7B%22title%22%3A%22A%22%2C%22price%22%3A5%7D%5D%7D%7D&path=store.book%5B0%5D.title&operation=get&value=9&pretty=true

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.