{"id":28293748,"url":"https://github.com/puellaquae/rust-json","last_synced_at":"2026-03-02T20:35:38.751Z","repository":{"id":46828143,"uuid":"395538498","full_name":"Puellaquae/rust-json","owner":"Puellaquae","description":"A simple JSON serializer and deserializer for learning rust","archived":false,"fork":false,"pushed_at":"2025-01-12T13:51:04.000Z","size":82,"stargazers_count":4,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-30T20:05:24.802Z","etag":null,"topics":["json","rust"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/rust_json","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Puellaquae.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-08-13T06:06:35.000Z","updated_at":"2025-01-12T13:51:07.000Z","dependencies_parsed_at":"2023-01-29T22:01:21.129Z","dependency_job_id":null,"html_url":"https://github.com/Puellaquae/rust-json","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Puellaquae/rust-json","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Puellaquae%2Frust-json","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Puellaquae%2Frust-json/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Puellaquae%2Frust-json/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Puellaquae%2Frust-json/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Puellaquae","download_url":"https://codeload.github.com/Puellaquae/rust-json/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Puellaquae%2Frust-json/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263400136,"owners_count":23460826,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["json","rust"],"created_at":"2025-05-22T06:14:31.708Z","updated_at":"2025-10-07T22:11:34.981Z","avatar_url":"https://github.com/Puellaquae.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rust_json\n\n![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/Puellaquae/rust-json/rust.yml?branch=master) [![Latest Version](https://img.shields.io/crates/v/rust_json.svg)](https://crates.io/crates/rust_json)\n\n学习 rust 所写的 JSON 解析与序列化工具。 JSON serializer and deserializer written for learning rust.\n\n解析的编写参考了 miloyip 的 [json-tutorial](https://github.com/miloyip/json-tutorial)。 Parser is learned from miloyip's [json-tutorial](https://github.com/miloyip/json-tutorial).\n\nRust 宏的编写参考了 [Serde JSON](https://github.com/serde-rs/json)。 Marco is learned from [Serde JSON](https://github.com/serde-rs/json).\n\n## 功能 / Feature\n\n### 从字符串解析 json / Parse json from string\n\n```rust\nuse rust_json::json_parse;\n\nfn example() {\n    let j = json_parse(r#\"\n    {\n        \"S\": [\n            1, \n            2.3, \n            {\n                \"4\": {\n                    \"5\": {\n                        \"6\": [\n                            null,\n                            true, \n                            false\n                            ]\n                        }\n                    }\n            }\n        ]\n    }\"#);\n\n    println!(\"{}\", j[\"S\"]);\n}\n```\n\n### 以 json 的风格构造 JsonElem / Construct JsonElem with json literal\n\n```rust\nuse rust_json::json;\n\nfn example() {\n    let j = json!(\n        {\n            \"S\": [\n                1.2, \n                \"2.3\", \n                {\n                    \"4\": {\n                        \"5\": {\n                            \"6\": [\n                                null,\n                                true, \n                                false\n                                ]\n                            }\n                        }\n                }\n            ]\n        }\n    );\n\n    println!(\"{}\", j[\"S\"]);\n}\n```\n\n### 以 js 的风格构造 JsonElem / Construct JsonElem with js object literal style\n\n```rust\nuse rust_json::js_object;\n\nfn proc(n: i32) -\u003e i32 {\n    n * n + n / 2\n}\n\nfn main() {\n    let a = true;\n    let n = 32;\n    let j = js_object!([\n        {\n            a // 属性的简洁表示 Property Shorthand\n        },\n        {\n            // 使用表达式作为值 Using expression\n            proc_n: if n % 2 == 0 { proc(n) + 1 } else { 0 }, \n            [n * 12]: n * 12 // 属性名表达式 Computed Property Names\n        }\n    ]);\n    println!(\"{}\", j);\n}\n```\n\n### `#[derive(ToJson)]`\n```rust\nuse rust_json::ToJson;\nuse rust_json_derive::ToJson;\n\n#[derive(ToJson)]\nstruct Simple {\n    n: f64,\n    b: bool,\n}\n\n#[derive(ToJson)]\nstruct Nest {\n    a: Vec\u003cf64\u003e,\n    s: Simple,\n}\n\n#[derive(ToJson)]\nenum Enum {\n    Unit,\n    One(i32),\n    Two(i32, i32),\n    Cmpx { a: i32, b: i32, c: i32 },\n}\n\nfn main() {\n    let s = Simple { n: 12.3, b: true };\n    println!(\"{}\", s.to_json());\n\n    let n = Nest {\n        a: vec![1.2, 2.3],\n        s: s,\n    };\n    println!(\"{}\", n.to_json());\n\n    let u = E::Unit;\n    let o = E::One(1);\n    let t = E::Two(1, 2);\n    let c = E::Cmpx { a: 1, b: 2, c: 3 };\n    println!(\"{}\", u.to_json());\n    println!(\"{}\", o.to_json());\n    println!(\"{}\", t.to_json());\n    println!(\"{}\", c.to_json());\n}\n```\n\n### `#[derive(FromJson)]`\n```rust\nuse rust_json::json_parse;\nuse rust_json_derive::FromJson;\n\n#[derive(Debug, FromJson)]\nstruct Simple {\n    n: f64,\n    b: bool,\n}\n\n#[derive(Debug, FromJson)]\nstruct Nest {\n    a: Vec\u003cf64\u003e,\n    s: Simple,\n}\n\n#[derive(Debug, FromJson)]\nenum Enum {\n    Unit,\n    One(i32),\n    Two(i32, i32),\n    Cmpx { a: i32, b: i32, c: i32 },\n}\n\nfn main() {\n    println!(\"{:?}\", json_parse(r#\"{\"n\": 12.3, \"b\": true}\"#).get::\u003cSimple\u003e());\n\n    println!(\"{:?}\", json_parse(r#\"\n    {\n        \"a\": [1.2, 2.3],\n        \"s\": {\"n\": 12.3, \"b\": true}\n    }\n    \"#).get::\u003cNest\u003e());\n\n    println!(\"{:?}\", json_parse(r#\"\"Unit\"\"#).get::\u003cEnum\u003e());\n    \n    println!(\"{:?}\", json_parse(r#\"{\"One\": 1}\"#).get::\u003cEnum\u003e());\n\n    println!(\"{:?}\", json_parse(r#\"\n    {\n        \"Two\": [1, 2]\n    }\n    \"#).get::\u003cEnum\u003e());\n\n    println!(\"{:?}\", json_parse(r#\"\n    {\n        \"Cmpx\": {\"a\": 1, \"b\": 2, \"c\": 3}\n    }\n    \"#).get::\u003cEnum\u003e());\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpuellaquae%2Frust-json","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpuellaquae%2Frust-json","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpuellaquae%2Frust-json/lists"}