react-json-view vs react-json-tree vs jsoneditor vs react-json-editor-ajrm vs react-jsonschema-form
JSON Editing Libraries for Web Development Comparison
1 Year
react-json-viewreact-json-treejsoneditorreact-json-editor-ajrmreact-jsonschema-formSimilar Packages:
What's JSON Editing Libraries for Web Development?

These libraries provide various functionalities for editing, displaying, and managing JSON data in web applications. They cater to different needs, from simple visualization to complex form handling, making it easier for developers to work with JSON data structures in their applications.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
react-json-view641,5383,522-1804 years agoMIT
react-json-tree408,85614,12363.6 kB203a year agoMIT
jsoneditor199,52411,7668.09 MB2298 days agoApache-2.0
react-json-editor-ajrm68,291358350 kB12 years agoMIT
react-jsonschema-form43,68814,601-3095 years agoApache-2.0
Feature Comparison: react-json-view vs react-json-tree vs jsoneditor vs react-json-editor-ajrm vs react-jsonschema-form

Editing Capabilities

  • react-json-view:

    react-json-view allows inline editing of JSON objects, enabling users to modify values directly within the displayed tree structure. This feature is useful for quick edits and debugging tasks.

  • react-json-tree:

    react-json-tree is primarily a read-only component, focusing on displaying JSON data rather than editing it. It provides a clean and organized view of JSON structures, which is ideal for visualization purposes.

  • jsoneditor:

    jsoneditor offers both tree and text editing modes, allowing users to switch between a structured view and a raw JSON text view. This flexibility makes it suitable for both novice and advanced users who may prefer different editing styles.

  • react-json-editor-ajrm:

    react-json-editor-ajrm provides a straightforward editing experience with a focus on simplicity. It allows users to edit JSON data directly in a text area, making it easy to manipulate data without overwhelming features.

  • react-jsonschema-form:

    react-jsonschema-form generates forms based on JSON Schema, allowing users to input data through a structured form interface. This approach simplifies data entry and validation, making it easy to manage complex JSON data.

Integration with React

  • react-json-view:

    react-json-view is a React component that seamlessly integrates into React applications, providing a simple way to display and edit JSON data without additional configuration.

  • react-json-tree:

    react-json-tree is also built for React, providing a component that can be easily used within any React application. Its API is straightforward, allowing for quick implementation.

  • jsoneditor:

    jsoneditor can be integrated into React applications but may require additional setup to manage state and props effectively. It is versatile but not specifically tailored for React.

  • react-json-editor-ajrm:

    react-json-editor-ajrm is designed specifically for React, making it easy to integrate and use within React components. It follows React's principles and lifecycle methods, ensuring a smooth development experience.

  • react-jsonschema-form:

    react-jsonschema-form is a React-specific library that allows for easy integration of dynamic forms based on JSON Schema, making it a great choice for React developers needing form handling.

User Experience

  • react-json-view:

    react-json-view provides a simple yet effective interface for viewing and editing JSON data, making it accessible for users of all skill levels, especially during debugging.

  • react-json-tree:

    react-json-tree offers a visually appealing way to display JSON data, with collapsible nodes and syntax highlighting that improve readability and user engagement.

  • jsoneditor:

    jsoneditor provides a rich user interface with features like drag-and-drop, search, and validation feedback, enhancing the overall user experience when working with JSON data.

  • react-json-editor-ajrm:

    react-json-editor-ajrm focuses on a clean and minimalistic user interface, which is easy to navigate for users who may not be familiar with JSON structures.

  • react-jsonschema-form:

    react-jsonschema-form enhances user experience by automatically generating forms with validation, ensuring that users can easily input data while adhering to the defined schema.

Performance

  • react-json-view:

    react-json-view is designed for quick rendering and editing of JSON objects, but performance may degrade with extremely large datasets due to re-rendering of the entire tree.

  • react-json-tree:

    react-json-tree is efficient in rendering and displaying JSON data, but performance may vary with very large datasets. It is best used for moderate-sized JSON objects.

  • jsoneditor:

    jsoneditor is optimized for performance with large JSON datasets, but complex structures may still lead to slower rendering times. It is important to test performance with expected data sizes.

  • react-json-editor-ajrm:

    react-json-editor-ajrm is lightweight and performs well with moderate-sized JSON objects, making it suitable for applications that do not require extensive data manipulation.

  • react-jsonschema-form:

    react-jsonschema-form is efficient in generating forms based on JSON Schema, but performance can be affected by the complexity of the schema and the number of fields in the form.

Customization

  • react-json-view:

    react-json-view allows for basic customization of the display format, including options for styling and formatting the JSON output, making it adaptable to different use cases.

  • react-json-tree:

    react-json-tree provides some customization options for styling the tree view, allowing developers to adjust colors and fonts to match their application's design.

  • jsoneditor:

    jsoneditor allows for extensive customization options, enabling developers to style the editor and modify its behavior to fit specific application needs.

  • react-json-editor-ajrm:

    react-json-editor-ajrm offers limited customization options, focusing on simplicity and ease of use rather than extensive configurability.

  • react-jsonschema-form:

    react-jsonschema-form allows for significant customization through the use of custom widgets and field templates, enabling developers to tailor the form experience to their application's requirements.

How to Choose: react-json-view vs react-json-tree vs jsoneditor vs react-json-editor-ajrm vs react-jsonschema-form
  • react-json-view:

    Use react-json-view when you need a simple and efficient way to display and edit JSON data with minimal setup. It is particularly useful for debugging and inspecting JSON objects in React applications, providing a straightforward interface for users.

  • react-json-tree:

    Opt for react-json-tree if your primary need is to display JSON data in a structured and visually appealing way. This library is perfect for applications that require a read-only view of JSON data, with features like syntax highlighting and collapsible nodes.

  • jsoneditor:

    Choose jsoneditor if you need a versatile and feature-rich JSON editor that supports both tree and text views, allowing users to easily manipulate JSON data in a user-friendly interface. It's suitable for applications that require extensive JSON editing capabilities.

  • react-json-editor-ajrm:

    Select react-json-editor-ajrm if you are looking for a React-specific JSON editor that offers a clean interface and is easy to integrate into React applications. It is ideal for projects where you want to maintain a consistent React ecosystem.

  • react-jsonschema-form:

    Choose react-jsonschema-form if you require a powerful solution for rendering forms based on JSON Schema. This library is best suited for applications that need to generate dynamic forms with validation and user input handling based on JSON data.

README for react-json-view

alt text

npm npm Build Status Coverage Status

react-json-view

RJV is a React component for displaying and editing javascript arrays and JSON objects.

This component provides a responsive interface for displaying arrays or JSON in a web browser. NPM offers a distribution of the source that's transpiled to ES5; so you can include this component with any web-based javascript application.

Check out the Interactive Demo

Implementation Example

// import the react-json-view component
import ReactJson from 'react-json-view'

// use the component in your app!
<ReactJson src={my_json_object} />

Output Examples

Default Theme

alt text

Hopscotch Theme, with Triangle Icons:

alt text

Installation Instructions

Install this component with NPM.

npm install --save react-json-view

Or add to your package.json config file:

"dependencies": {
    "react-json-view": "latest"
}

Props

Name|Type|Default|Description |:---|:---|:---|:--- src|JSON Object|None|This property contains your input JSON name|string or false|"root"|Contains the name of your root node. Use null or false for no name. theme|string|"rjv-default"|RJV supports base-16 themes. Check out the list of supported themes in the demo. A custom "rjv-default" theme applies by default. style|object|{}|Style attributes for react-json-view container. Explicit style attributes will override attributes provided by a theme. iconStyle|string|"circle"| Style of expand/collapse icons. Accepted values are "circle", triangle" or "square". indentWidth|integer|4|Set the indent-width for nested objects collapsed|boolean or integer|false|When set to true, all nodes will be collapsed by default. Use an integer value to collapse at a particular depth. collapseStringsAfterLength|integer|false|When an integer value is assigned, strings will be cut off at that length. Collapsed strings are followed by an ellipsis. String content can be expanded and collapsed by clicking on the string value. shouldCollapse|(field)=>{}|false|Callback function to provide control over what objects and arrays should be collapsed by default. An object is passed to the callback containing name, src, type ("array" or "object") and namespace. groupArraysAfterLength|integer|100|When an integer value is assigned, arrays will be displayed in groups by count of the value. Groups are displayed with bracket notation and can be expanded and collapsed by clicking on the brackets. enableClipboard|boolean or (copy)=>{}|true|When prop is not false, the user can copy objects and arrays to clipboard by clicking on the clipboard icon. Copy callbacks are supported. displayObjectSize|boolean|true|When set to true, objects and arrays are labeled with size displayDataTypes|boolean|true|When set to true, data type labels prefix values onEdit|(edit)=>{}|false|When a callback function is passed in, edit functionality is enabled. The callback is invoked before edits are completed. Returning false from onEdit will prevent the change from being made. see: onEdit docs onAdd|(add)=>{}|false|When a callback function is passed in, add functionality is enabled. The callback is invoked before additions are completed. Returning false from onAdd will prevent the change from being made. see: onAdd docs defaultValue|string \|number \|boolean \|array \|object|null|Sets the default value to be used when adding an item to json onDelete|(delete)=>{}|false|When a callback function is passed in, delete functionality is enabled. The callback is invoked before deletions are completed. Returning false from onDelete will prevent the change from being made. see: onDelete docs onSelect|(select)=>{}|false|When a function is passed in, clicking a value triggers the onSelect method to be called. sortKeys|boolean|false|set to true to sort object keys quotesOnKeys|boolean|true|set to false to remove quotes from keys (eg. "name": vs. name:) validationMessage|string|"Validation Error"|Custom message for validation failures to onEdit, onAdd, or onDelete callbacks displayArrayKey|boolean|true|When set to true, the index of the elements prefix values

Features

  • onEdit, onAdd and onDelete props allow users to edit the src variable
  • Object, array, string and function values can be collapsed and expanded
  • Object and array nodes display length
  • Object and array nodes support a "Copy to Clipboard" feature
  • String values can be truncated after a specified length
  • Arrays can be subgrouped after a specified length
  • Base-16 Theme Support
  • When onEdit is enabled:
    • Ctrl/Cmd+Click Edit Mode
    • Ctrl/Cmd+Enter Submit

Customizing Style

Stock Themes

RJV now supports base-16 themes!

You can specify a theme name or object when you instantiate your rjv component.

<ReactJson src={my_important_json} theme="monokai" />

Check out the list of supported themes in the component demo.

Monokai theme example

alt text

Solarized theme example

alt text

Use Your Own Theme

You can supply your own base-16 theme object.

To better understand custom themes, take a look at my example implementation and the base-16 theme styling guidelines.

onEdit, onAdd and onDelete Interaction

Pass callback methods to onEdit, onAdd and onDelete props. Your method will be invoked when a user attempts to update your src object.

The following object will be passed to your method:

{
    updated_src: src, //new src value
    name: name, //new var name
    namespace: namespace, //list, namespace indicating var location
    new_value: new_value, //new variable value
    existing_value: existing_value, //existing variable value
}

Returning false from a callback method will prevent the src from being affected.

Contributing to the source code

Run the Dev Server

# clone this repository
git clone git@github.com:mac-s-g/react-json-view.git && cd react-json-view
# install dependencies
npm install --save-dev
# run the dev server with hot reloading
npm run dev

Webpack Dev Server should automatically open up http://localhost:2000 in your web browser. If it does not, open a browser and navigate to port 2000. The hot reloader will automatically reload when files are modified in the /src/ directory.

Run the Production Build

# run the build (note: you may need to use `sudo` priveledges to run the build successfully)
npm run build

Please add tests for your code before posting a pull request.

You can run the test suite with npm run test or npm run test:watch to automatically reload when files are modified.

Docker Tools

I recommend using docker for development because it enforces environmental consistency.

For information about contributing with Docker, see the README in ./docker.

Inspiration

I drew a ton of design ideas from react-json-tree. Thanks to the RJT contributors for putting together an awesome component!

I'm also inspired by users who come up with interesting feature requests. Reach out to me with ideas for this project or other projects you want to collaborate on. My email address is listed on my github user page.