JsonInput
Capture json data from user
Source
LLM docs
Docs
PackageIcon
Usage
JsonInput is based on the Textarea component.
It includes JSON validation logic and an option to format the input value on blur:
Loading state
Set loading prop to display a loading indicator. By default, the loader is displayed on the right side of the input.
You can change the position with the loadingPosition prop to 'left' or 'right'. This is useful for async operations like API calls, searches, or validations:
Controlled
Uncontrolled
JsonInput can be used with uncontrolled forms the same way as a native textarea element.
Set the name attribute to include json input value in FormData object on form submission.
To control the initial value in uncontrolled forms, use the defaultValue prop.
Example usage of uncontrolled JsonInput with FormData:
Custom serialization
You can provide custom serialize and deserialize functions to support data formats beyond standard JSON.
This is useful when you need to handle types like Date, Map, Set, undefined, or other non-JSON-serializable values.
The example below shows how to use superjson library to handle extended data types:
The deserialize function must throw an error when the input is invalid. Both serialize and deserialize
functions are used for formatting when formatOnBlur is enabled.
Input props
JsonInput component supports Input and Input.Wrapper component features and all textarea element props. The JsonInput documentation does not include all features supported by the component – see the Input documentation to learn about all available features.
Input description
Disabled state
Styles API
JsonInput supports the Styles API; you can add styles to any inner element of the component with the classNames prop. Follow the Styles API documentation to learn more.
Description
Error
Component Styles API
Hover over selectors to highlight corresponding elements
Get element ref
Accessibility
If JsonInput is used without the label prop, it will not be announced properly by screen readers:
Set aria-label to make the input accessible. In this case the label will not be visible, but screen readers will announce it:
If the label prop is set, the input will be accessible and it is not required to set aria-label: