screenshot A highly-configurable [React](https://github.com/facebook/react) component for editing or viewing JSON/object data ## [Explore the Demo](https://carlosnz.github.io/json-edit-react/) ![NPM Version](https://img.shields.io/npm/v/json-edit-react) ![GitHub License](https://img.shields.io/github/license/carlosnz/json-edit-react) ![NPM Downloads](https://img.shields.io/npm/dm/json-edit-react) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/CarlosNZ/json-edit-react) [![Discuss on GitHub](https://img.shields.io/badge/Discussions-Join%20the%20conversation-blue?logo=github)](https://github.com/CarlosNZ/json-edit-react/discussions) [![Sponsor](https://img.shields.io/badge/Sponsor-♥-pink.svg)](https://github.com/sponsors/CarlosNZ) ### Features include: - ✅ **Easy inline editing** of individual values or whole blocks of JSON text - 🔒 **Granular control** – restrict edits, deletions, or additions per element - 📏 **[JSON Schema](https://json-schema.org/) validation** (using 3rd-party validation library) - 🎨 **Customisable UI** — built-in or custom [themes](https://github.com/CarlosNZ/json-edit-react#themes--styles), CSS overrides or targeted classes - 📦 **Self-contained** — plain HTML/CSS, no external UI library dependencies, and *zero runtime dependencies* - 🔍 **Search & filter** — find data by key, value or custom function - 🚧 **[Custom components](https://github.com/CarlosNZ/json-edit-react#custom-nodes)** — replace keys and/or values with specialised components (e.g. date picker, links, images, `undefined`, `BigInt`, `Symbol`) - 🌏 **[Localisation](https://github.com/CarlosNZ/json-edit-react#localisation)** — easily translate UI labels and messages - 🔄 **[Drag-n-drop](https://github.com/CarlosNZ/json-edit-react#drag-n-drop)** re-ordering within objects/arrays - 🎹 **[Keyboard customisation](https://github.com/CarlosNZ/json-edit-react#keyboard-customisation)** — define your own key bindings - 🎮 **[External control](https://github.com/CarlosNZ/json-edit-react#external-control-1)** via callbacks and triggers 💡 Try the **[Live Demo](https://carlosnz.github.io/json-edit-react/)** to see these features in action! screenshot ---- > **📣️ ANNOUNCEMENT** > > V2 of **json-edit-react** is now available in beta, with significant refactors and performance improvements. > ``` > npm install json-edit-react@beta > yarn add json-edit-react@beta > pnpm add json-edit-react@beta > ``` > ❗️ If you're upgrading from V1, be sure to read the [migration guide](https://github.com/CarlosNZ/json-edit-react/blob/main/migration-guide.md). > > 📖️ **[FULL DOCS](https://github.com/CarlosNZ/json-edit-react/blob/main/README_V2.md)** > > If you've got any suggestions, please join the discussion [here](https://github.com/CarlosNZ/json-edit-react/discussions/198). breaking changes ## Installation ```sh # Depending on your package manager: npm i json-edit-react # OR yarn add json-edit-react ``` ## Implementation ```jsx import { JsonEditor } from 'json-edit-react' // In your React component: return ( ); ``` ## Usage **(for end user)** It's pretty self explanatory (click the "edit" icon to edit, etc.), but there are a few not-so-obvious ways of interacting with the editor: - **Double-click** a value (or a key) to edit it - When editing a string, use `Cmd/Ctrl/Shift-Enter` to add a new line (`Enter` submits the value) - It's the opposite when editing a full object/array node (which you do by **clicking "edit"** on an object or array value) — `Enter` for new line, and `Cmd/Ctrl/Shift-Enter` for submit - `Escape` to **cancel** editing - When clicking the "**clipboard**" icon, holding down `Cmd/Ctrl` will copy the *path* to the selected node rather than its value - When opening/closing a node, hold down "Alt/Option" to open/close *all* child nodes at once - For Number inputs, **arrow-up** and **down** keys will increment/decrement the value - For Boolean inputs, **space bar** will toggle the value - Easily navigate to the next or previous node for editing using the `Tab`/`Shift-Tab` keys. - **Drag and drop** items to change the structure or modify display order - When editing is not permitted, double-clicking a string value will expand the text to the full value if it is truncated due to length (there is also a clickable "..." for long strings) - **JSON text input** can accept "looser" input, if an additional JSON parsing method is provided (e.g. [JSON5](https://json5.org/)). See `jsonParse` prop. [Have a play with the Demo app](https://carlosnz.github.io/json-edit-react/) to get a feel for it! --- For **FULL DOCUMENTATION**, visit [https://github.com/CarlosNZ/json-edit-react](https://github.com/CarlosNZ/json-edit-react#json-edit-react)