Note
This README was translated by ChatGPT 4.1, get the original version from here.
A Firebase-style JSON editor based on pure JavaScript and native APIs, featuring visual editing, dynamic type switching, and file import/export. Suitable for website embedding and JSON data editing.
- Three Core Features
- Usage
- Configuration
- Editor Features
- Available Methods
- Lifecycle
- Additional Notes
- License
- Author
- Stars
Developed entirely with native DOM APIs, no third-party dependencies, easily embeddable in any web project.
Displays JSON data in a tree structure similar to the Firebase console, supports collapse/expand, dynamic node addition/removal, and provides an intuitive editing interface.
Supports 5 standard JSON data types (string, number, boolean, array, object), allows real-time type switching while preserving data integrity.
npm install @pardnchiu/nanojson<script src="https://cdn.jsdelivr.net/npm/@pardnchiu/nanojson@[VERSION]/dist/NanoJSON.js"></script>import { JSONEditor } from "https://cdn.jsdelivr.net/npm/@pardnchiu/nanojson@[VERSION]/dist/NanoJSON.esm.js";// Basic initialization
const editor = new JSONEditor({
id: "json-editor-container", // Element ID
title: "JSON Editor", // Editor title
description: "Edit your JSON", // Editor description
fill: true, // Fill parent container
json: { // Initial JSON data
name: "NanoJSON",
version: "0.3.4",
features: ["Lightweight", "Pure JS", "Visual Editing"]
}
});
// Advanced configuration
const advancedEditor = new JSONEditor({
id: "advanced-editor",
title: "Advanced JSON Editor",
description: "Full-featured JSON editor",
fill: 1, // Fill container (1 = true, 0 = false)
button: { // Button configuration
import: true, // Import file
export: true, // Export file
reset: true // Reset editor
},
when: { // Lifecycle callbacks
rendered: () => {
console.log("Editor rendered");
},
updated: () => {
console.log("Editor content updated");
}
}
});
// Initialize from file
const fileEditor = new JSONEditor({
id: "file-editor",
path: "/data/sample.json", // Load from URL
// file: fileInput.files[0], // Load from file object
});const config = {
id: "container-id", // Target container element ID
title: "", // Editor title (default: "")
description: "", // Editor description (default: "")
fill: 1, // Fill parent container (default: 1)
readonly: 0, // Read-only mode (default: 0)
json: {}, // Initial JSON data object
file: null, // File object (for uploads)
path: "", // JSON file URL path
button: { // Button toggles
import: true, // Import button (default: true)
export: true, // Export button (default: true)
reset: true // Reset button (default: true)
},
when: { // Lifecycle events
beforeRender: null, // Before render
rendered: null, // After render
beforeUpdate: null, // Before update
updated: null, // After update
beforeDestroy: null, // Before destroy
destroyed: null // After destroy
}
};// Edit via text input
"Hello World"// Number input, auto-filters non-numeric characters
42
3.14159
-123
.123// Dropdown selection
true
false// Supports nested structures, add/remove elements
[
"item1",
"item2",
123,
true,
{
"nested": "object"
}
]// Supports nested structures, add/remove properties
{
"key1": "value1",
"key2": 456,
"nested": {
"deep": "value"
}
}-
Get JSON Data
const jsonString = editor.json; // Get formatted JSON string console.log(jsonString);
-
Import Data
// Import from object await editor.import({ name: "New Data", version: "1.0.0" }); // Import from file const fileInput = document.querySelector('input[type="file"]'); await editor.import(fileInput.files[0]); // Import from URL await editor.import('/path/to/data.json');
-
Export File
editor.export(); // Automatically download JSON file
-
Reset Editor
editor.reset(); // Clear all content
-
Add Root Node
editor.insert(); // Add empty root node
-
Re-render
editor.render(); // Force re-render editor
-
Enable Edit Mode
editor.enable();
-
Read-only Mode
editor.disable();
const editor = new JSONEditor({
id: "editor",
when: {
beforeRender: () => {
console.log("About to render");
// Return false to prevent rendering
},
rendered: () => {
console.log("Render complete");
// Post-initialization
},
beforeUpdate: () => {
console.log("About to update content");
// Return false to prevent update
},
updated: () => {
console.log("Content updated");
// Post-update, e.g., sync to server
},
beforeDestroy: () => {
console.log("About to destroy editor");
},
destroyed: () => {
console.log("Editor destroyed");
}
}
});- Only
.jsonfile format supported - Automatically validates JSON syntax
- Automatically formats JSON (4-space indentation)
- File naming:
JSONEditor-{timestamp}.json
- This project switched to MIT license from 2025/07/06 and fully removed
.git-cryptencryption.
This project is licensed under the MIT.
©️ 2025 邱敬幃 Pardn Chiu
