基于yyjson封装的JSON序列化和反序列化C++类库

基于yyjson封装的JSON序列化和反序列化C++类库
可适用于低版本C++,便于在多数C++环境使用,大部分JSON解析和创建功能已封装
本项目地址:https://gitcode.com/bitera/yyjson_for_cpp
yyjson项目地址: https://github.com/ibireme/yyjson

		// Read JSON string
		// #include "JParse.h" // Used for C++
		{
			const char* json = "{\"name\":\"Mash\",\"star\":4,\"hits\":[2,2,1,3]}";

			// Create a parse object, parse JSON string, support {...} or [...]
			JParse j_Parse(json);

			if (j_Parse.isObj()) {
				// If it is an object
				auto j_obj = j_Parse.getObj();
				if (j_obj) {
					// Get root["name"]
					printf("name: %s\n", j_obj->asChars("name"));

					// Get root["star"]
					printf("star: %d\n", j_obj->asInt("star"));

					// Get root["hits"]
					auto j_arr = j_obj->getArr("hits");
					if (j_arr) {
						// Traverse sub elements
						for (size_t i = 0; i < j_arr->size(); i++) {
							printf("hit%d: %d\n", (int)i, j_arr->asInt(i));
						}
					}
				}
			}
			else if (j_Parse.isArr()) {
				// If it is an array
				auto j_arr = j_Parse.getArr();
				if (j_arr) {
					// Number of array elements
					printf("Array size: %d\n", (int)j_arr->size());

					//......
				}
			}
			
		}
		// Write JSON string
		// #include "Create.h" //Used for C++
		{
			// Create a object
			JCreateObject j_Obj;
			
			// Set root["name"] and root["star"]
			j_Obj.add("name", "Mash");
			j_Obj.add("star", 4);

			// Set root["hits"] with an array
			int hits_arr[] = { 2, 2, 1, 3 };
			j_Obj.add("hits", hits_arr, 4);
			// Or vector
			std::vector<int> hits_arr2 = { 6, 7, 8, 9 };
			j_Obj.add("hits2", hits_arr2);

			// Set root["obj"] with an object
			auto j_obj1 = j_Obj.addObj("obj");
			if (j_obj1) {
				j_obj1->add("name", "Tom");
				j_obj1->add("age", 18);
			}
			
			// Set root["arr"] with an array, can add more different types of elements
			auto j_arr1 = j_Obj.addArr("arr");
			if (j_arr1) {
				j_arr1->add(1);
				j_arr1->add(2);
				j_arr1->add(3);
				j_arr1->add(true);
				j_arr1->addNull();
				j_arr1->add(hits_arr2);
			}

			// To string
			std::string str;
			bool wTrue = j_Obj.write(str);
			if (wTrue) {
				printf("json: %s\n", str.data());
			}
		}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值