• Stars
    star
    113
  • Rank 308,421 (Top 7 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created about 8 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

React Native JSON Viewer Component, based on react-json-tree

react-native-json-tree

React Native JSON Viewer Component, based on react-json-tree. Supports iterable objects, such as Immutable.js.

Usage

import JSONTree from 'react-native-json-tree'
// If you're using Immutable.js: `npm i --save immutable`
import { Map } from 'immutable'

// Inside a React component:
const json = {
  array: [1, 2, 3],
  bool: true,
  object: {
    foo: 'bar'
  }
  immutable: Map({ key: 'value' })
}

<JSONTree data={json} />

Result:

Check out the Example directory.

Theming

This component now uses react-base16-styling module, which allows to customize component via theme property, which can be the following:

  • base16 theme data. The example theme data can be found here.
  • object that contains style objects, strings (that treated as classnames) or functions. A function is used to extend its first argument { style, className } and should return an object with the same structure. Other arguments depend on particular context (and should be described here). See createStylingFromTheme.js for the list of styling object keys. Also, this object can extend base16 theme via extend property.

Every theme has a light version, which is enabled with invertTheme prop.

const theme = {
  scheme: 'monokai',
  author: 'wimer hazenberg (http://www.monokai.nl)',
  base00: '#272822',
  base01: '#383830',
  base02: '#49483e',
  base03: '#75715e',
  base04: '#a59f85',
  base05: '#f8f8f2',
  base06: '#f5f4f1',
  base07: '#f9f8f5',
  base08: '#f92672',
  base09: '#fd971f',
  base0A: '#f4bf75',
  base0B: '#a6e22e',
  base0C: '#a1efe4',
  base0D: '#66d9ef',
  base0E: '#ae81ff',
  base0F: '#cc6633'
};

<JSONTree data={data} theme={theme} invertTheme={false} />

Result (Monokai theme, dark background):

Advanced Customization

<JSONTree data={data} theme={{
  extend: theme,
  // underline keys for literal values
  valueLabel: {
    textDecoration: 'underline'
  },
  // switch key for objects to uppercase when object is expanded.
  // `nestedNodeLabel` receives additional arguments `expanded` and `keyPath`
  nestedNodeLabel: ({ style }, nodeType, expanded) => ({
    style: {
      ...style,
      textTransform: expanded ? 'uppercase' : style.textTransform
    }
  })
}} />

Customize Labels for Arrays, Objects, and Iterables

You can pass getItemString to customize the way arrays, objects, and iterable nodes are displayed (optional).

By default, it'll be:

<JSONTree getItemString={(type, data, itemType, itemString) =>
  <Text>{itemType} {itemString}</Text>}
/>

But if you pass the following:

const getItemString = (type, data, itemType, itemString) =>
  <Text>{type}</Text>;

Then the preview of child elements now look like this:

Customize Rendering

You can pass the following properties to customize rendered labels and values:

<JSONTree
  labelRenderer={raw => <Text style={{ fontWeight: 'bold' }}>{raw}</Text>}
  valueRenderer={raw => <Text style={{ fontStyle: 'italic' }}>{raw}</Text>}
/>

In this example the label and value will be rendered with bold and italic text respectively.

For labelRenderer, you can provide a full path - see this PR.

More Options

  • shouldExpandNode: (keyName, data, level) => boolean - determines if node should be expanded (root is expanded by default)
  • hideRoot: boolean - if true, the root node is hidden.
  • sortObjectKeys: boolean | (a, b) => number - sorts object keys with compare function (optional). Isn't applied to iterable maps like Immutable.Map.

Credits

License

MIT

More Repositories

1

use-url-state

Lift a React component's state into the url
TypeScript
155
star
2

reason-standard

An easy-to-use, comprehensive, and safe standard library enhancement for Reason and OCaml.
OCaml
53
star
3

jest-to-match-shape-of

A Jest matcher to verify the shape of an object. Makes integration testing simple.
TypeScript
41
star
4

splitwise-node

A javascript wrapper for the Splitwise API.
JavaScript
10
star
5

react-justified-layout

Flickr's justifed layout as a React component
JavaScript
9
star
6

git-watch

Automatically pull non conflicting remotes
CSS
7
star
7

with-notification-system

Create notifications from your react components
TypeScript
6
star
8

higher-order-form

A collection of packages to simplify working with forms
TypeScript
5
star
9

create-reducer-extra

Create boilerplate-free, type-safe Redux reducers
TypeScript
5
star
10

react-native-demo

A demo app to accompany my talk on react native
JavaScript
3
star
11

async

TypeScript
3
star
12

advent-of-code

My Advent of Code solutions
OCaml
2
star
13

reason-luxon

BuckleScript bindings for Luxon
Reason
2
star
14

jumpy-bird-react-demo

Live coding demo.
JavaScript
2
star
15

deanmerchant.com

The repository for deanmerchant.com
JavaScript
2
star
16

lunch

Eat lunch
JavaScript
2
star
17

reason-log-update

Bucklescript bindings to log-update
Reason
1
star
18

jest-to-render-without-error

A Jest matcher to verify the render method of a React component
TypeScript
1
star
19

reason-uuid

Bucklescript bindings for node-uuid
Reason
1
star
20

hypernova-go

A Go client for Hypernova
Go
1
star
21

karma-requirejs-typescript

Example project demonstrating a way to use the karma test runner with an AMD target for typescript.
JavaScript
1
star
22

with-url-state-deprecated

RENAMED this package is now called use-url-state
TypeScript
1
star
23

ppx_fields

OCaml
1
star
24

http-nodejs

JavaScript
1
star
25

pool-ladder

React
JavaScript
1
star
26

static-website

Serve some files or a static website with minimal fuss
JavaScript
1
star
27

better-bleau

CSS
1
star
28

json-web-tokens-spark-kotlin

Kotlin
1
star
29

lava-lights

Uses the rasberry pi's gpio pins to control a lava-lamp based build status indicator
JavaScript
1
star