RyanJsonExample.c 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. #include <time.h>
  6. #include "RyanJson.h"
  7. #include "valloc.h"
  8. /**
  9. * @brief 生成json示例
  10. *
  11. * @return int
  12. */
  13. static int createJsonExample(void)
  14. {
  15. char *str = NULL;
  16. RyanJson_t jsonRoot, item;
  17. // 对象生成测试
  18. jsonRoot = RyanJsonCreateObject();
  19. RyanJsonAddIntToObject(jsonRoot, "inter", 16);
  20. RyanJsonAddDoubleToObject(jsonRoot, "double", 16.89);
  21. RyanJsonAddStringToObject(jsonRoot, "string", "hello");
  22. RyanJsonAddBoolToObject(jsonRoot, "boolTrue", RyanJsonTrue);
  23. RyanJsonAddBoolToObject(jsonRoot, "boolFalse", RyanJsonFalse);
  24. RyanJsonAddNullToObject(jsonRoot, "null");
  25. // 添加子对象
  26. item = RyanJsonCreateObject();
  27. RyanJsonAddIntToObject(item, "inter", 16);
  28. RyanJsonAddDoubleToObject(item, "double", 16.89);
  29. RyanJsonAddStringToObject(item, "string", "hello");
  30. RyanJsonAddBoolToObject(item, "boolTrue", RyanJsonTrue);
  31. RyanJsonAddBoolToObject(item, "boolFalse", RyanJsonFalse);
  32. RyanJsonAddNullToObject(item, "null");
  33. RyanJsonAddItemToObject(jsonRoot, "item", item); // 将上面创建的item子对象添加到root父对象
  34. // 添加数字子数组
  35. int arrayInt[] = {16, 16, 16, 16, 16};
  36. RyanJsonAddItemToObject(jsonRoot, "arrayInt", RyanJsonCreateIntArray(arrayInt, sizeof(arrayInt) / sizeof(arrayInt[0])));
  37. // 添加浮点数子数组
  38. double arrayDouble[] = {16.89, 16.89, 16.89, 16.89, 16.89};
  39. RyanJsonAddItemToObject(jsonRoot, "arrayDouble", RyanJsonCreateDoubleArray(arrayDouble, sizeof(arrayDouble) / sizeof(arrayDouble[0])));
  40. // 添加字符串子数组
  41. const char *arrayString[] = {"hello", "hello", "hello", "hello", "hello"};
  42. RyanJsonAddItemToObject(jsonRoot, "arrayString", RyanJsonCreateStringArray(arrayString, sizeof(arrayString) / sizeof(arrayString[0])));
  43. // 添加杂项数组
  44. RyanJson_t array = RyanJsonCreateArray();
  45. RyanJsonAddIntToArray(array, 16);
  46. RyanJsonAddDoubleToArray(array, 16.89);
  47. RyanJsonAddStringToArray(array, "hello");
  48. RyanJsonAddBoolToArray(array, RyanJsonTrue);
  49. RyanJsonAddBoolToArray(array, RyanJsonFalse);
  50. RyanJsonAddNullToArray(array);
  51. RyanJsonAddItemToObject(jsonRoot, "array", array); // 将上面创建的item子对象数组添加到root父对象
  52. // 添加对象数组
  53. RyanJson_t arrayItem = RyanJsonCreateArray();
  54. item = RyanJsonCreateObject();
  55. RyanJsonAddIntToObject(item, "inter", 16);
  56. RyanJsonAddDoubleToObject(item, "double", 16.89);
  57. RyanJsonAddStringToObject(item, "string", "hello");
  58. RyanJsonAddBoolToObject(item, "boolTrue", RyanJsonTrue);
  59. RyanJsonAddBoolToObject(item, "boolFalse", RyanJsonFalse);
  60. RyanJsonAddNullToObject(item, "null");
  61. RyanJsonAddItemToObject(arrayItem, "item", item); // 将item对象添加到arrayItem数组里面
  62. item = RyanJsonCreateObject();
  63. RyanJsonAddIntToObject(item, "inter", 16);
  64. RyanJsonAddDoubleToObject(item, "double", 16.89);
  65. RyanJsonAddStringToObject(item, "string", "hello");
  66. RyanJsonAddBoolToObject(item, "boolTrue", RyanJsonTrue);
  67. RyanJsonAddBoolToObject(item, "boolFalse", RyanJsonFalse);
  68. RyanJsonAddNullToObject(item, "null");
  69. RyanJsonAddItemToObject(arrayItem, "item", item); // 将item对象添加到arrayItem数组里面
  70. RyanJsonAddItemToObject(jsonRoot, "arrayItem", arrayItem); // 将arrayItem数组添加到root父对象
  71. uint32_t len = 0;
  72. str = RyanJsonPrint(jsonRoot, 250, RyanJsonTrue, &len); // 以带格式方式将数据打印出来
  73. printf("strLen: %d, data: %s\r\n", len, str);
  74. RyanJsonFree(str);
  75. RyanJsonDelete(jsonRoot);
  76. return 0;
  77. }
  78. /**
  79. * @brief 序列化json文本示例
  80. *
  81. * @return int
  82. */
  83. static int loadJsonExample(void)
  84. {
  85. char *str = NULL;
  86. RyanJson_t jsonRoot;
  87. const char jsonstr[] = "{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null,\"item\":{\"inter\":16,\"double\":16.89,\"string\":\"hello\","
  88. "\"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\","
  89. "\"hello\",\"hello\",\"hello\",\"hello\"],\"array\":[16,16.89,\"hello\",true,false,null],\"arrayItem\":[{\"inter\":16,\"double\":16.89,\"string\":\"hello\","
  90. "\"boolTrue\":true,\"boolFalse\":false,\"null\":null},{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null}]}";
  91. // 解析json数据
  92. jsonRoot = RyanJsonParse(jsonstr);
  93. if (jsonRoot == NULL)
  94. {
  95. printf("%s:%d 序列化失败\r\n", __FILE__, __LINE__);
  96. return -1;
  97. }
  98. // 将序列化的数据以无格式样式打印出来,并和原始数据进行对比
  99. str = RyanJsonPrint(jsonRoot, 250, RyanJsonFalse, NULL);
  100. if (strcmp(str, jsonstr) != 0)
  101. {
  102. printf("%s:%d 序列化与反序列化后的数据不对应\r\n", __FILE__, __LINE__);
  103. RyanJsonFree(str);
  104. RyanJsonDelete(jsonRoot);
  105. return -1;
  106. }
  107. RyanJsonFree(str);
  108. // 将序列化的数据以有格式样式打印出来
  109. uint32_t len = 0;
  110. str = RyanJsonPrint(jsonRoot, 250, RyanJsonTrue, &len);
  111. printf("strLen: %d, data: %s\r\n", len, str);
  112. RyanJsonFree(str);
  113. // 删除json对象
  114. RyanJsonDelete(jsonRoot);
  115. return 0;
  116. }
  117. /**
  118. * @brief 修改json示例
  119. *
  120. * @return int
  121. */
  122. static int changeJsonExample(void)
  123. {
  124. char *str = NULL;
  125. RyanJson_t jsonRoot;
  126. const char *jsonstr = "{\"name\":\"Mash\",\"star\":4,\"hits\":[2,2,1,3]}";
  127. // 解析json数据
  128. jsonRoot = RyanJsonParse(jsonstr);
  129. if (jsonRoot == NULL)
  130. {
  131. printf("%s:%d 序列化失败\r\n", __FILE__, __LINE__);
  132. return -1;
  133. }
  134. RyanJsonChangeStringValue(RyanJsonGetObjectByKey(jsonRoot, "name"), "Ryan");
  135. if (0 != strcmp("Ryan", RyanJsonGetStringValue(RyanJsonGetObjectByKey(jsonRoot, "name"))))
  136. {
  137. printf("%s:%d 修改失败\r\n", __FILE__, __LINE__);
  138. RyanJsonDelete(jsonRoot);
  139. return -1;
  140. }
  141. RyanJsonReplaceByKey(jsonRoot, "star", RyanJsonCreateString("", "123456"));
  142. // 将序列化的数据以有格式样式打印出来
  143. uint32_t len = 0;
  144. str = RyanJsonPrint(jsonRoot, 250, RyanJsonTrue, &len);
  145. printf("strLen: %d, data: %s\r\n", len, str);
  146. RyanJsonFree(str);
  147. // 删除json对象
  148. RyanJsonDelete(jsonRoot);
  149. return 0;
  150. }
  151. RyanJsonBool_e RyanJsonExample(void)
  152. {
  153. RyanJsonInitHooks(v_malloc, v_free, v_realloc);
  154. printf("\r\n--------------------------- RyanJson 生成示例 --------------------------\r\n");
  155. createJsonExample();
  156. printf("\r\n--------------------------- RyanJson 序列化json文本示例 --------------------------\r\n");
  157. loadJsonExample();
  158. printf("\r\n--------------------------- RyanJson 修改json示例 --------------------------\r\n");
  159. changeJsonExample();
  160. return RyanJsonTrue;
  161. }