{"id":24017542,"url":"https://github.com/flamecyclone/fcjson","last_synced_at":"2025-06-25T06:06:15.423Z","repository":{"id":259203577,"uuid":"876584684","full_name":"flamecyclone/fcjson","owner":"flamecyclone","description":null,"archived":false,"fork":false,"pushed_at":"2024-10-25T03:32:57.000Z","size":660,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-10-25T06:23:30.961Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flamecyclone.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-22T08:11:46.000Z","updated_at":"2024-10-25T03:33:01.000Z","dependencies_parsed_at":"2025-01-08T09:19:37.058Z","dependency_job_id":"9089575b-abd8-498d-adaf-632da992e39e","html_url":"https://github.com/flamecyclone/fcjson","commit_stats":null,"previous_names":["flamecyclone/fcjson"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/flamecyclone/fcjson","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flamecyclone%2Ffcjson","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flamecyclone%2Ffcjson/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flamecyclone%2Ffcjson/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flamecyclone%2Ffcjson/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flamecyclone","download_url":"https://codeload.github.com/flamecyclone/fcjson/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flamecyclone%2Ffcjson/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261816338,"owners_count":23213865,"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":[],"created_at":"2025-01-08T09:19:32.816Z","updated_at":"2025-06-25T06:06:15.386Z","avatar_url":"https://github.com/flamecyclone.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fcjson\r\n\r\n[English](README_en.md) | [中文](README_zh.md)\r\n\r\n## Introduction\r\nA Tiny JSON Parse/Dump for C++\r\n\r\n## Software Architecture\r\nC++11\r\n\r\n## Installation Guide\r\n\r\nAdd fcjson.h and fcjson.cpp to your project and include them as references.\r\n\r\n## Usage Instructions\r\n\r\n  ```c++\r\n  fcjson::json_value val = fcjson::json_object{\r\n      { \"null\", nullptr},\r\n      { \"bool_false\", false },\r\n      { \"bool_true\", true },\r\n      { \"int_min\", INT64_MIN },\r\n      { \"int_max\", INT64_MAX },\r\n      { \"uint_max\", UINT64_MAX },\r\n      { \"float\", 3.1415926535 },\r\n      { \"object\", fcjson::json_object{\r\n              { \"name\", \"我是地球🌍\" },\r\n              { \"age\", 30 }\r\n          },\r\n      },\r\n      { \"array\", fcjson::json_array{\r\n          nullptr,\r\n          false, true, INT64_MIN, INT64_MAX, 3.1415926535\r\n          }\r\n      }\r\n  };\r\n  ```\r\n\r\n  \r\n\r\n- ### Parse string/dump string\r\n\r\n  ```c++\r\n  fcjson::json_value val;\r\n  \r\n  val.parse(R\"({\"name\":\"FlameCyclone\",\"age\":30})\");\r\n  std::string strJson = val.dump(4, true);\r\n  std::cout \u003c\u003c strJson \u003c\u003c std::endl;\r\n  \r\n  // Accessing an array\r\n  val[\"array\"] = fcjson::json_type::json_type_array;\r\n  auto\u0026 array = val[\"array\"];\r\n  for (int i = 0; i \u003c 5; i++)\r\n  {\r\n      array[i] = i;\r\n  }\r\n  \r\n  // Delete array element\r\n  array.remove(4);\r\n  \r\n  // Access array element\r\n  val[\"object\"] = fcjson::json_type::json_type_object;\r\n  auto\u0026 object = val[\"object\"];\r\n  for (int i = 0; i \u003c 5; i++)\r\n  {\r\n      object[std::to_string(i)] = i;\r\n  }\r\n  \r\n  // Delete object element\r\n  object.remove(\"1\");\r\n  \r\n  // Assignment\r\n  val[\"hobby\"] = \"C++\";\r\n  val.remove(\"object\");\r\n  val[\"hobby\"] = nullptr;\r\n  \r\n  std::cout \u003c\u003c val.dump(4, true) \u003c\u003c std::endl;\r\n  ```\r\n\r\n  \r\n\r\n- ### Parse/Dump\r\n\r\n  ```c++\r\n  fcjson::json_value val;\r\n  val.parse_from_file(\"data.json\");\r\n  val.dump_to_file(\"dump.json\", 4);\r\n  ```\r\n\r\n  \r\n\r\n- ### Example\r\n\r\n  ```c++\r\n  #include \u003ciostream\u003e\r\n  #include \u003clocale\u003e\r\n  #include \u003cstring\u003e\r\n  #include \u003cfstream\u003e\r\n  #include \"fcjson.h\"\r\n  \r\n  #pragma execution_character_set(\"utf-8\")\r\n  \r\n  #if  0\r\n  #define TEST_JSON_FILE  \"data.json\"\r\n  #else\r\n  #define TEST_JSON_FILE  \"city_4.json\"\r\n  #endif\r\n  \r\n  int count = 1;\r\n  int dump_indent = 4;\r\n  \r\n  int main()\r\n  {\r\n      setlocale(LC_ALL, \"en_US.UTF-8\");\r\n  \r\n      // Construct a JSON object\r\n      std::cout \u003c\u003c \"Construct a JSON object\" \u003c\u003c std::endl;\r\n      {\r\n          fcjson::json_value val = fcjson::json_object{\r\n              { \"null\", nullptr},\r\n              { \"bool_false\", false },\r\n              { \"bool_true\", true },\r\n              { \"int_min\", INT64_MIN },\r\n              { \"int_max\", INT64_MAX },\r\n              { \"uint_max\", UINT64_MAX },\r\n              { \"float\", 3.1415926535 },\r\n              { \"object\", fcjson::json_object{\r\n                      { \"name\", \"我是地球🌍\" },\r\n                      { \"age\", 30 }\r\n                  },\r\n              },\r\n              { \"array\", fcjson::json_array{\r\n                  nullptr,\r\n                  false, true, INT64_MIN, INT64_MAX, 3.1415926535\r\n                  }\r\n              }\r\n          };\r\n  \r\n          // Serialize (without escaping UNICODE characters)\r\n          std::cout \u003c\u003c val.dump(4, false) \u003c\u003c std::endl;\r\n  \r\n          // Serialization (with escaping UNICODE characters)\r\n          std::cout \u003c\u003c val.dump(4, true) \u003c\u003c std::endl;\r\n      }\r\n  \r\n      // Assignment Operation\r\n      std::cout \u003c\u003c std::endl;\r\n      std::cout \u003c\u003c \"Assignment Operation\" \u003c\u003c std::endl;\r\n      {\r\n          fcjson::json_value val;\r\n          val = fcjson::json_array{ 1,2,3,4,5,6,7,8,9,0 };\r\n          std::cout \u003c\u003c \"count: \" \u003c\u003c val.count() \u003c\u003c std::endl;\r\n          std::cout \u003c\u003c \"type: \" \u003c\u003c val.get_type_name() \u003c\u003c std::endl;\r\n          std::cout \u003c\u003c val.dump(4, false) \u003c\u003c std::endl;\r\n  \r\n          val = fcjson::json_object{{ \"name\", \"我是地球🌍\" }, { \"age\", 30 }};\r\n          std::cout \u003c\u003c \"count: \" \u003c\u003c val.count() \u003c\u003c std::endl;\r\n          std::cout \u003c\u003c \"type: \" \u003c\u003c val.get_type_name() \u003c\u003c std::endl;\r\n          std::cout \u003c\u003c val.dump(4, false) \u003c\u003c std::endl;\r\n      }\r\n  \r\n      // Parse String / Dump String\r\n      std::cout \u003c\u003c std::endl;\r\n      std::cout \u003c\u003c \"Parse String / Dump String\" \u003c\u003c std::endl;\r\n      {\r\n          fcjson::json_value val;\r\n  \r\n          val.parse(R\"({\"name\":\"FlameCyclone\",\"age\":30})\");\r\n          std::string strJson = val.dump(4, true);\r\n          std::cout \u003c\u003c strJson \u003c\u003c std::endl;\r\n  \r\n          // Access Array\r\n          val[\"array\"] = fcjson::json_type::json_type_array;\r\n          auto\u0026 array = val[\"array\"];\r\n          for (int i = 0; i \u003c 5; i++)\r\n          {\r\n              array[i] = i;\r\n          }\r\n  \r\n          // Delete Array Element\r\n          array.remove(4);\r\n  \r\n          // Access Object\r\n          val[\"object\"] = fcjson::json_type::json_type_object;\r\n          auto\u0026 object = val[\"object\"];\r\n          for (int i = 0; i \u003c 5; i++)\r\n          {\r\n              object[std::to_string(i)] = i;\r\n          }\r\n  \r\n          // Delete Object Element\r\n          object.remove(\"1\");\r\n  \r\n          // Assignment\r\n          val[\"hobby\"] = \"C++\";\r\n          val.remove(\"object\");\r\n          val[\"hobby\"] = nullptr;\r\n  \r\n          std::cout \u003c\u003c val.dump(4, true) \u003c\u003c std::endl;\r\n      }\r\n  \r\n      // Parse File / Dump File\r\n      std::cout \u003c\u003c std::endl;\r\n      std::cout \u003c\u003c \"Parse File / Dump File\" \u003c\u003c std::endl;\r\n      {\r\n          fcjson::json_value val;\r\n          val.parse_from_file(\"data.json\");\r\n          val.dump_to_file(\"dump.json\", 4);\r\n      }\r\n  \r\n      std::ifstream inputFile(TEST_JSON_FILE, std::ios::binary | std::ios::in);\r\n      if (!inputFile.is_open())\r\n      {\r\n          return -1;\r\n      }\r\n  \r\n      inputFile.seekg(0, std::ios::end);\r\n      std::streamoff nSize = inputFile.tellg();\r\n      inputFile.seekg(0, std::ios::beg);\r\n  \r\n      std::string strBuffer(nSize, 0);\r\n      inputFile.read((char*)\u0026strBuffer[0], nSize);\r\n      inputFile.close();\r\n  \r\n      // Performance Testing\r\n      size_t nCount = count;\r\n      clock_t timeBegin = clock();\r\n      clock_t timeEnd = clock();\r\n  \r\n      std::cout \u003c\u003c std::endl;\r\n      std::cout \u003c\u003c \"Performance Testing\" \u003c\u003c std::endl;\r\n      while (true)\r\n      {\r\n          {\r\n              fcjson::json_value val;\r\n              val.parse_from_file(\"data.json\");\r\n  \r\n              timeBegin = clock();\r\n              for (int i = 0; i \u003c nCount; i++)\r\n              {\r\n                  val.parse(strBuffer);\r\n              }\r\n              timeEnd = clock();\r\n              std::cout \u003c\u003c \"parse cost time: \" \u003c\u003c timeEnd - timeBegin \u003c\u003c std::endl;\r\n  \r\n              timeBegin = clock();\r\n              std::string strDump;\r\n              for (int i = 0; i \u003c nCount; i++)\r\n              {\r\n                  strDump = val.dump(dump_indent);\r\n              }\r\n              timeEnd = clock();\r\n              std::cout \u003c\u003c \"dump cost time: \" \u003c\u003c timeEnd - timeBegin \u003c\u003c std::endl;\r\n              std::cout \u003c\u003c \"dump text size: \" \u003c\u003c strDump.size() \u003c\u003c std::endl;\r\n  \r\n              {\r\n                  std::ofstream outputFile(\"dump_fcjson.json\", std::ios::binary | std::ios::out);\r\n                  if (outputFile.is_open())\r\n                  {\r\n                      outputFile.write(strDump.data(), strDump.size());\r\n                  }\r\n              }\r\n              std::cout \u003c\u003c std::endl;\r\n          }\r\n  \r\n          system(\"pause\");\r\n      }\r\n  \r\n      return 0;\r\n  }\r\n  \r\n  ```\r\n  \r\n- ### Performance\r\n\r\nParse file:  [city_4.json](Bin/city_4.json)\r\n\r\n  ```c++\r\nFlameCyclone/fcjson\r\nparse: 67 ms Mem: 26.3086 MB\r\ndump: 30 ms Mem: 5.07812 MB Dump size: 2850256 Bytes\r\n\r\nRapidJSON\r\nparse: 31 ms Mem: 6.84375 MB\r\ndump: 17 ms Mem: 7.28516 MB Dump size: 2850256 Bytes\r\n\r\nnlohmann/json\r\nparse: 99 ms Mem: 27.7891 MB\r\ndump: 31 ms Mem: 32.5625 MB Dump size: 2850256 Bytes\r\n\r\nhjiang/jsonxx\r\nparse: 409 ms Mem: 30.3203 MB\r\ndump: 635 ms Mem: 20.0195 MB Dump size: 15973857 Bytes\r\n\r\nNomango/configor\r\nparse: 765 ms Mem: 41.2227 MB\r\ndump: 450 ms Mem: 5.65625 MB Dump size: 2850256 Bytes\r\n  ```\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflamecyclone%2Ffcjson","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflamecyclone%2Ffcjson","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflamecyclone%2Ffcjson/lists"}