一个用C++写的Json解析与处理库

标签:

以下转自:http://blog.csdn.net/ggicci/article/details/10600403

什么是Json?这个库能做什么?
JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. Json 是一种轻量的数据交换格式,和 XML 一样在 Web 开发中非常常用。在 Ajax 的应用中,前台基本上会用到 JSON 作为数据交换格式,因为在 JS 里面可以通过 JSON.parse() 函数对 JSON 格式的字符串进行解析得到 JS 对象,通过这个 JS 对象可以轻松地获取和修改里面的数据。而这个库 ggicci::Json 可以像 JS 一样通过解析获得一个类似的 C++ 对象。通过这个 C++ 对象,你可以像使用 JS 一样对数据进行获取和修改,语法上基本类似。只不过 C++ 是强类型语言,所以当你在试图用不一样的数据类型去获取里面的值的时候会抛异常。至于 C++ 是否需要 JSON 解析器,答案是肯定的,比如某个 CS 架构的程序,服务器端有某些页面采用 web 技术输出 JSON 数据,客户端是 C++ 客户端,它向这些页面发送 HTTP 请求并接收到 JSON 数据,这些数据就需要解析以配合客户端的使用。当然除非客户端只是输出这些字符串或者客户端采用与 C++ 与 JS 混合编程方式,让 JS 去处理这些数据。 项目地址和文档 Github:https://github.com/ggicci/ggicci--json GGICCI:http://ggicci.me/works/json 文档:http://ggicci.me/works/json/doc 看一个简单例子 #include <iostream> #include "gci-json.h" using namespace std; using namespace ggicci; int main(int argc, char const *argv[]) { // Parse a string to get a Json object Json json = Json::Parse("{ \ \"id\": 18293, \ \"name\": \"Ggicci\", \ \"birthday\": [1991, 11, 10], \ \"man\": true \ }"); cout << "json = " << json << endl; cout << "-----------------------" << endl; cout << "id: " << json["id"] << endl; cout << "name: " << json["name"] << endl; cout << "birthday-year: " << json["birthday"][0] << endl; cout << "birthday-month: " << json["birthday"][1] << endl; cout << "birthday-day: " << json["birthday"][2] << endl; cout << "man: " << boolalpha << json["man"] << endl; cout << "-----------------------" << endl; json["name"] = "Mingjie Tang"; // add property: method 1 json["school"] = "Northwest A&F University"; // add property: method 2 json.AddProperty("traits", Json::Parse("[]").Push("sympathetic").Push("independent")); cout << "json = " << json << endl; cout << "-----------------------" << endl; json["birthday"].Remove(0); json.Remove("id").Remove("school"); cout << "json = " << json << endl; return 0; } /* output: ----------------------- id: 18293 name: "Ggicci" birthday-year: 1991 birthday-month: 11 birthday-day: 10 man: true ----------------------- json = { "birthday": [ 1991, 11, 10 ], "id": 18293, "man": true, "name": "Mingjie Tang", "school": "Northwest A&F University", "traits": [ "sympathetic", "independent" ] } ----------------------- json = { "birthday": [ 11, 10 ], "man": true, "name": "Mingjie Tang", "traits": [ "sympathetic", "independent" ] } */ 如果你对 JSON 的处理比较熟悉(你可能会使用 JS 处理 JSON 数据),你会发现上面的代码很好理解。

与 JS 的使用比较(语法层面上)

对于原始的 JSON 字符串 str: { "id": 1000, "name": "ggicci", "birthday": [1991, 11, 10] }

JS: var str = ‘{ "id": 1000, "name": "ggicci", "birthday": [1991, 11, 10] }‘;

C++: const char* str = "{\"id\": 1000, \"name\": \"ggicci\", \"birthday\": [1991, 11, 10] }";

一个用C++写的Json解析与处理库

扫一扫手机访问