
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
@pardnchiu/nanojson
Advanced tools
A lightweight JSON editor built with pure JavaScript and native APIs. It features visual editing, dynamic type switching, and file import/export capabilities. Suitable for website embedding and JSON data editing.
[!Note] This content is translated by LLM. Original text can be found here
A lightweight JSON editor built with pure JavaScript and native APIs. It features visual editing, dynamic type switching, and file import/export capabilities. Suitable for website embedding and JSON data editing.
This project transitioned to MIT license on 2025/07/06, with
.git-crypt
encryption fully removed.
Developed using native DOM APIs without any third-party dependencies, making it easy to integrate into any web project.
Displays JSON data in a tree structure, supporting folding/unfolding, dynamic node addition/removal, and providing an intuitive editing interface.
Supports five JSON data types (string
, number
, boolean
, array
, object
) with real-time type switching while maintaining 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, // File import
export: true, // File export
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)
json: {}, // Initial JSON data object
file: null, // File object (for file upload)
path: "", // JSON file URL path
button: { // Button toggles
import: true, // File import button (default: true)
export: true, // File 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
}
};
// Text input editing
"Hello World"
// Numeric input, automatically filters non-numeric characters
42
3.14159
-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 an empty root node
Re-render
editor.render(); // Force re-render the editor
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 handling
},
beforeUpdate: () => {
console.log("About to update content");
// Return false to prevent update
},
updated: () => {
console.log("Content updated");
// Post-update handling, e.g., sync to server
},
beforeDestroy: () => {
console.log("About to destroy editor");
},
destroyed: () => {
console.log("Editor destroyed");
}
}
});
.json
file format supportedJSONEditor-{timestamp}.json
This project is licensed under MIT.
©️ 2025 邱敬幃 Pardn Chiu
FAQs
A lightweight JSON editor built with pure JavaScript and native APIs. It features visual editing, dynamic type switching, and file import/export capabilities. Suitable for website embedding and JSON data editing.
We found that @pardnchiu/nanojson demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.
Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.