| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- #include "RyanJson.h"
- #include "RyanJsonUtils.h"
- /**
- * @brief 生成json示例
- *
- * @return RyanJsonBool_e
- */
- static RyanJsonBool_e createJsonExample(void)
- {
- char *str = NULL;
- RyanJson_t jsonRoot, item;
- // 对象生成测试
- jsonRoot = RyanJsonCreateObject();
- RyanJsonAddIntToObject(jsonRoot, "inter", 16);
- RyanJsonAddDoubleToObject(jsonRoot, "double", 16.89);
- RyanJsonAddStringToObject(jsonRoot, "string", "hello");
- RyanJsonAddBoolToObject(jsonRoot, "boolTrue", RyanJsonTrue);
- RyanJsonAddBoolToObject(jsonRoot, "boolFalse", RyanJsonFalse);
- RyanJsonAddNullToObject(jsonRoot, "null");
- // 添加子对象
- item = RyanJsonCreateObject();
- RyanJsonAddIntToObject(item, "inter", 16);
- RyanJsonAddDoubleToObject(item, "double", 16.89);
- RyanJsonAddStringToObject(item, "string", "hello");
- RyanJsonAddBoolToObject(item, "boolTrue", RyanJsonTrue);
- RyanJsonAddBoolToObject(item, "boolFalse", RyanJsonFalse);
- RyanJsonAddNullToObject(item, "null");
- RyanJsonAddItemToObject(jsonRoot, "item", item); // 将上面创建的item子对象添加到root父对象
- // 添加数字子数组
- int arrayInt[] = {16, 16, 16, 16, 16};
- RyanJsonAddItemToObject(jsonRoot, "arrayInt", RyanJsonCreateIntArray(arrayInt, sizeof(arrayInt) / sizeof(arrayInt[0])));
- // 添加浮点数子数组
- double arrayDouble[] = {16.89, 16.89, 16.89, 16.89, 16.89};
- RyanJsonAddItemToObject(jsonRoot, "arrayDouble",
- RyanJsonCreateDoubleArray(arrayDouble, sizeof(arrayDouble) / sizeof(arrayDouble[0])));
- // 添加字符串子数组
- const char *arrayString[] = {"hello", "hello", "hello", "hello", "hello"};
- RyanJsonAddItemToObject(jsonRoot, "arrayString",
- RyanJsonCreateStringArray(arrayString, sizeof(arrayString) / sizeof(arrayString[0])));
- // 添加杂项数组
- RyanJson_t array = RyanJsonCreateArray();
- RyanJsonAddIntToArray(array, 16);
- RyanJsonAddDoubleToArray(array, 16.89);
- RyanJsonAddStringToArray(array, "hello");
- RyanJsonAddBoolToArray(array, RyanJsonTrue);
- RyanJsonAddBoolToArray(array, RyanJsonFalse);
- RyanJsonAddNullToArray(array);
- RyanJsonAddItemToObject(jsonRoot, "array", array); // 将上面创建的item子对象数组添加到root父对象
- // 添加对象数组
- RyanJson_t arrayItem = RyanJsonCreateArray();
- item = RyanJsonCreateObject();
- RyanJsonAddIntToObject(item, "inter", 16);
- RyanJsonAddDoubleToObject(item, "double", 16.89);
- RyanJsonAddStringToObject(item, "string", "hello");
- RyanJsonAddBoolToObject(item, "boolTrue", RyanJsonTrue);
- RyanJsonAddBoolToObject(item, "boolFalse", RyanJsonFalse);
- RyanJsonAddNullToObject(item, "null");
- RyanJsonAddItemToObject(arrayItem, "item", item); // 将item对象添加到arrayItem数组里面
- item = RyanJsonCreateObject();
- RyanJsonAddIntToObject(item, "inter", 16);
- RyanJsonAddDoubleToObject(item, "double", 16.89);
- RyanJsonAddStringToObject(item, "string", "hello");
- RyanJsonAddBoolToObject(item, "boolTrue", RyanJsonTrue);
- RyanJsonAddBoolToObject(item, "boolFalse", RyanJsonFalse);
- RyanJsonAddNullToObject(item, "null");
- RyanJsonAddItemToObject(arrayItem, "item", item); // 将item对象添加到arrayItem数组里面
- RyanJsonAddItemToObject(jsonRoot, "arrayItem", arrayItem); // 将arrayItem数组添加到root父对象
- uint32_t len = 0;
- str = RyanJsonPrint(jsonRoot, 250, RyanJsonTrue, &len); // 以带格式方式将数据打印出来
- printf("strLen: %" PRIu32 ", data: %s\r\n", len, str);
- RyanJsonFree(str);
- RyanJsonDelete(jsonRoot);
- return RyanJsonTrue;
- }
- /**
- * @brief 序列化json文本示例
- *
- * @return RyanJsonBool_e
- */
- static RyanJsonBool_e loadJsonExample(void)
- {
- char *str = NULL;
- RyanJson_t jsonRoot = NULL;
- const char *jsonstr = "{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null,"
- "\"item\":{\"inter\":16,\"double\":16.89,\"string\":\"hello\","
- "\"boolTrue\":true,\"boolFalse\":false,\"null\":null},\"arrayInt\":[16,16,16,16,16],\"arrayDouble\":[16.89,"
- "16.89,16.89,16.89,16.89],\"arrayString\":[\"hello\","
- "\"hello\",\"hello\",\"hello\",\"hello\"],\"array\":[16,16.89,\"hello\",true,false,null],\"arrayItem\":[{"
- "\"inter\":16,\"double\":16.89,\"string\":\"hello\","
- "\"boolTrue\":true,\"boolFalse\":false,\"null\":null},{\"inter\":16,\"double\":16.89,\"string\":\"hello\","
- "\"boolTrue\":true,\"boolFalse\":false,\"null\":null}]}";
- // 解析json数据
- jsonRoot = RyanJsonParse(jsonstr);
- if (NULL == jsonRoot)
- {
- printf("%s:%d 序列化失败\r\n", __FILE__, __LINE__);
- return RyanJsonFalse;
- }
- // 读取 int 数据
- int inter = RyanJsonGetIntValue(RyanJsonGetObjectByKey(jsonRoot, "inter"));
- if (inter != 16)
- {
- printf("%s:%d 读取int失败\r\n", __FILE__, __LINE__);
- RyanJsonDelete(jsonRoot);
- return RyanJsonFalse;
- }
- // 读取 double 数据
- double doubleValue = RyanJsonGetDoubleValue(RyanJsonGetObjectByKey(jsonRoot, "double"));
- if (RyanJsonFalse == RyanJsonCompareDouble(doubleValue, 16.89))
- {
- printf("%s:%d 读取double失败\r\n", __FILE__, __LINE__);
- RyanJsonDelete(jsonRoot);
- return RyanJsonFalse;
- }
- // 读取 string 数据
- const char *strValue = RyanJsonGetStringValue(RyanJsonGetObjectByKey(jsonRoot, "string"));
- if (0 != strcmp(strValue, "hello"))
- {
- printf("%s:%d 读取string失败\r\n", __FILE__, __LINE__);
- RyanJsonDelete(jsonRoot);
- return RyanJsonFalse;
- }
- // 读取 bool 数据
- RyanJsonBool_e boolValue = RyanJsonGetBoolValue(RyanJsonGetObjectByKey(jsonRoot, "boolTrue"));
- if (RyanJsonTrue != boolValue)
- {
- printf("%s:%d 读取bool失败\r\n", __FILE__, __LINE__);
- RyanJsonDelete(jsonRoot);
- return RyanJsonFalse;
- }
- // 读取 null 数据
- if (RyanJsonTrue != RyanJsonIsNull(RyanJsonGetObjectByKey(jsonRoot, "null")))
- {
- printf("%s:%d 读取null失败\r\n", __FILE__, __LINE__);
- RyanJsonDelete(jsonRoot);
- return RyanJsonFalse;
- }
- // 将序列化的数据以无格式样式打印出来,并和原始数据进行对比
- str = RyanJsonPrint(jsonRoot, 250, RyanJsonFalse, NULL);
- if (strcmp(str, jsonstr) != 0)
- {
- printf("%s:%d 序列化与反序列化后的数据不对应 %s\r\n", __FILE__, __LINE__, str);
- RyanJsonFree(str);
- RyanJsonDelete(jsonRoot);
- return RyanJsonFalse;
- }
- RyanJsonFree(str);
- // 将序列化的数据以有格式样式打印出来
- uint32_t len = 0;
- str = RyanJsonPrint(jsonRoot, 250, RyanJsonTrue, &len);
- printf("strLen: %" PRIu32 ", data: %s\r\n", len, str);
- RyanJsonFree(str);
- // 删除json对象
- RyanJsonDelete(jsonRoot);
- return RyanJsonTrue;
- }
- /**
- * @brief 修改json示例
- *
- * @return RyanJsonBool_e
- */
- static RyanJsonBool_e changeJsonExample(void)
- {
- char *str = NULL;
- RyanJson_t jsonRoot;
- const char *jsonstr = "{\"name\":\"Mash\",\"star\":4,\"doubleKey\":4.4,\"boolKey\":true,\"hits\":[2,2,1,3]}";
- // 解析json数据
- jsonRoot = RyanJsonParse(jsonstr);
- if (jsonRoot == NULL)
- {
- printf("%s:%d 序列化失败\r\n", __FILE__, __LINE__);
- return RyanJsonFalse;
- }
- // 修改key
- RyanJsonChangeKey(RyanJsonGetObjectByKey(jsonRoot, "name"), "name2");
- if (0 != strcmp("name2", RyanJsonGetKey(RyanJsonGetObjectByKey(jsonRoot, "name2"))))
- {
- printf("%s:%d 修改失败\r\n", __FILE__, __LINE__);
- RyanJsonDelete(jsonRoot);
- return RyanJsonFalse;
- }
- // 修改strValue
- RyanJsonChangeStringValue(RyanJsonGetObjectByKey(jsonRoot, "name2"), "Ryan");
- if (0 != strcmp("Ryan", RyanJsonGetStringValue(RyanJsonGetObjectByKey(jsonRoot, "name2"))))
- {
- printf("%s:%d 修改失败\r\n", __FILE__, __LINE__);
- RyanJsonDelete(jsonRoot);
- return RyanJsonFalse;
- }
- // 修改intValue
- RyanJsonChangeIntValue(RyanJsonGetObjectByKey(jsonRoot, "star"), 5);
- if (5 != RyanJsonGetIntValue(RyanJsonGetObjectByKey(jsonRoot, "star")))
- {
- printf("%s:%d 修改失败\r\n", __FILE__, __LINE__);
- RyanJsonDelete(jsonRoot);
- return RyanJsonFalse;
- }
- // 修改doubleValue
- RyanJsonChangeDoubleValue(RyanJsonGetObjectByKey(jsonRoot, "doubleKey"), 5.5);
- if (RyanJsonFalse == RyanJsonCompareDouble(RyanJsonGetDoubleValue(RyanJsonGetObjectByKey(jsonRoot, "doubleKey")), 5.5))
- {
- printf("%s:%d 修改失败\r\n", __FILE__, __LINE__);
- RyanJsonDelete(jsonRoot);
- return RyanJsonFalse;
- }
- // 修改boolValue
- RyanJsonChangeBoolValue(RyanJsonGetObjectByKey(jsonRoot, "boolKey"), RyanJsonFalse);
- if (RyanJsonFalse != RyanJsonGetBoolValue(RyanJsonGetObjectByKey(jsonRoot, "boolKey")))
- {
- printf("%s:%d 修改失败\r\n", __FILE__, __LINE__);
- RyanJsonDelete(jsonRoot);
- return RyanJsonFalse;
- }
- // 替换节点(修改节点类型)
- RyanJsonReplaceByKey(jsonRoot, "star", RyanJsonCreateString("", "123456"));
- // 将序列化的数据以有格式样式打印出来
- uint32_t len = 0;
- str = RyanJsonPrint(jsonRoot, 250, RyanJsonTrue, &len);
- printf("strLen: %" PRIu32 ", data: %s\r\n", len, str);
- RyanJsonFree(str);
- // 删除json对象
- RyanJsonDelete(jsonRoot);
- return RyanJsonTrue;
- }
- RyanJsonBool_e RyanJsonExample(void)
- {
- RyanJsonInitHooks(malloc, free, NULL);
- printf("\r\n--------------------------- RyanJson 生成示例 --------------------------\r\n");
- RyanJsonCheckReturnFalse(RyanJsonTrue == createJsonExample());
- printf("\r\n--------------------------- RyanJson 序列化json文本示例 --------------------------\r\n");
- RyanJsonCheckReturnFalse(RyanJsonTrue == loadJsonExample());
- printf("\r\n--------------------------- RyanJson 修改json示例 --------------------------\r\n");
- RyanJsonCheckReturnFalse(RyanJsonTrue == changeJsonExample());
- // 更多功能请查看 RyanJson.h 文件,不了解的可以查看 test/baseTest 下的文件
- return RyanJsonTrue;
- }
|