npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-json-view-lite

v2.0.1

Published

JSON viewer component for React focused on performance for large volume input while still providing few customiziation features

Downloads

1,223,101

Readme

Install

npm install --save react-json-view-lite

Version 2.x.x

Versions 2.x.x supports only React 18 and later. Please use 1.5.0 if your project uses React 16 or 17. Also version 2 provides better a11y support, collapsing/expanding and navigation through nested elements using arrow keys ("Space" button does not collapse/expand element anymore), but library size increased about 20%. If your project uses custom styles you might need to update the css for the basicChildStyle property like below:

.basic-child-style > ul {
  margin: 0;
  padding: 0;
}

because implementation uses ul element div instead of the elemenent according to the w3.org example.

Migration from the 0.9.x versions

  1. Property shouldInitiallyExpand has different name shouldExpandNode in order to emphasize that it will be called every time properties change.
  2. If you use custom styles:
    • pointer and expander are no longer used
    • component uses collapseIcon, expandIcon, collapsedContent styles in order to customize expand/collapse icon and collpased content placeholder which were previously hardcode to the , and .... Default style values use ::after pseudo-classes to set the content.

Usage

import * as React from 'react';

import { JsonView, allExpanded, darkStyles, defaultStyles } from 'react-json-view-lite';
import 'react-json-view-lite/dist/index.css';

const json = {
  a: 1,
  b: 'example'
};

const App = () => {
  return (
    <React.Fragment>
      <JsonView data={json} shouldExpandNode={allExpanded} style={defaultStyles} />
      <JsonView data={json} shouldExpandNode={allExpanded} style={darkStyles} />
    </React.Fragment>
  );
};

export default App;

Please note that in JavaScript, an anonymous function like function() {} or () => {} always creates a different function every time component is rendered, so you might need to use useCallback React Hook for the shouldExpandNode parameter or extract the function outside the functional component.

StoryBook

https://anyroad.github.io/react-json-view-lite/

Props

| Name | Type | Default Value | Description | | ----------------- | -------------------------------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | data | Object | Array<any> | | Data which should be rendered | | style | StyleProps | defaultStyles | Optional. CSS classes for rendering. Library provides two build-in implementations: darkStyles, defaultStyles (see below) | | shouldExpandNode | (level: number, value: any, field?: string) => boolean | allExpanded | Optional. Function which will be called during initial rendering for each Object and Array of the data in order to calculate should if this node be expanded. Note that this function will be called again to update the each node state once the property value changed. level startes from 0, field does not have a value for the array element. Library provides two build-in implementations: allExpanded and collapseAllNested (see below) | | clickToExpandNode | boolean | false | Optional. Set to true if you want to expand/collapse nodes by clicking on the node itself. |

Extra exported

| Name | Type | Description | | ----------------- | ---------------------------- | --------------------------------------------------- | | defaultStyles | StyleProps | Default styles for light background | | darkStyles | StyleProps | Default styles for dark background | | allExpanded | () => boolean | Always returns true | | collapseAllNested | (level: number) => boolean | Returns true only for the first level (level=0) |

StyleProps

| Name | Type | Description | | ----------------------- | ------- | ----------------------------------------------------------------------------------------------------------------- | | container | string | CSS class name for rendering parent block | | basicChildStyle | string | CSS class name for property block containing property name and value | | collapseIcon | string | CSS class name for rendering button collapsing Object and Array nodes. Default content is . | | expandIcon | string | CSS class name for rendering button expanding Object and Array nodes. Default content is . | | collapsedContent | string | CSS class name for rendering placeholder when Object and Array nodes are collapsed. Default contents is .... | | label | string | CSS class name for rendering property names | | clickableLabel | string | CSS class name for rendering clickable property names (requires the clickToExpandNode prop to be true) | | nullValue | string | CSS class name for rendering null values | | undefinedValue | string | CSS class name for rendering undefined values | | numberValue | string | CSS class name for rendering numeric values | | stringValue | string | CSS class name for rendering string values | | booleanValue | string | CSS class name for rendering boolean values | | otherValue | string | CSS class name for rendering all other values except Object, Arrray, null, undefined, numeric, boolean and string | | punctuation | string | CSS class name for rendering ,, [, ], {, } | | noQuotesForStringValues | boolean | whether or not to add double quotes when rendering string values, default value is false | | quotesForFieldNames | boolean | whether or not to add double quotes when rendering field names, default value is false |

Comparison with other libraries

Size and dependencies

Here is the size benchmark (using bundlephobia.com) against similar React libraries (found by https://www.npmjs.com/search?q=react%20json&ranking=popularity):

| Library | Bundle size | Bundle size (gzip) | Dependencies | | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | react-json-view-lite | | | | | react-json-pretty | | | | | react-json-inspector | | | | | react-json-tree | | | | | react-json-view | | | | | react-json-tree-viewer | | | |

Performance

Performance was mesaured using the react-component-benchmark library. Every component was rendered 50 times using the 300Kb json file as data source, please refer to source code of the benchmark project. All numbers are in milliseconds. Tests were performed on Macbook Air M1 16Gb RAM usging Chrome v96.0.4664.110(official build, arm64). Every component was tested 2 times but there was no significant differences in the results.

| Library | Min | Max | Average | Median | P90 | | ------------------------ | ----- | ----- | ------- | ------ | ----- | | react-json-view-lite | 81 | 604 | 195 | 82 | 582 | | react-json-pretty | 22 | 59 | 32 | 24 | 56 | | react-json-inspector | 682 | 1 109 | 758 | 711 | 905 | | react-json-tree | 565 | 1 217 | 658 | 620 | 741 | | react-json-view | 1 403 | 1 722 | 1529 | 1 540 | 1 631 | | react-json-tree-viewer | 266 | 663 | 320 | 278 | 455 |

As you can see react-json-pretty renders faster than other libraries but it does not have ability to collapse/expand nested objects so it might be good choice if you need just json syntax highlighting.

License

MIT © AnyRoad