RyanJsonExample.c 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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. int createJsonExample()
  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",
  37. RyanJsonCreateIntArray(arrayInt, sizeof(arrayInt) / sizeof(arrayInt[0])));
  38. double arrayDouble[] = {16.89, 16.89, 16.89, 16.89, 16.89};
  39. RyanJsonAddItemToObject(jsonRoot, "arrayDouble",
  40. RyanJsonCreateDoubleArray(arrayDouble, sizeof(arrayDouble) / sizeof(arrayDouble[0])));
  41. const char *arrayString[] = {"hello", "hello", "hello", "hello", "hello"};
  42. RyanJsonAddItemToObject(jsonRoot, "arrayString",
  43. RyanJsonCreateStringArray(arrayString, sizeof(arrayString) / sizeof(arrayString[0])));
  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. int loadJsonExample()
  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\",\"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}]}";
  88. // 解析json数据
  89. jsonRoot = RyanJsonParse(jsonstr);
  90. if (jsonRoot == NULL)
  91. {
  92. printf("%s:%d 序列化失败\r\n", __FILE__, __LINE__);
  93. return -1;
  94. }
  95. // 将序列化的数据以无格式样式打印出来,并和原始数据进行对比
  96. str = RyanJsonPrint(jsonRoot, 250, RyanJsonFalse, NULL);
  97. if (strcmp(str, jsonstr) != 0)
  98. {
  99. printf("%s:%d 序列化与反序列化后的数据不对应\r\n", __FILE__, __LINE__);
  100. RyanJsonFree(str);
  101. RyanJsonDelete(jsonRoot);
  102. return -1;
  103. }
  104. RyanJsonFree(str);
  105. // 将序列化的数据以有格式样式打印出来
  106. uint32_t len = 0;
  107. str = RyanJsonPrint(jsonRoot, 250, RyanJsonTrue, &len);
  108. printf("strLen: %d, data: %s\r\n", len, str);
  109. RyanJsonFree(str);
  110. // 删除json对象
  111. RyanJsonDelete(jsonRoot);
  112. return 0;
  113. }
  114. /**
  115. * @brief 修改json示例
  116. *
  117. * @return int
  118. */
  119. int changeJsonExample()
  120. {
  121. char *str = NULL;
  122. RyanJson_t jsonRoot;
  123. const char *jsonstr = "{\"name\":\"Mash\",\"star\":4,\"hits\":[2,2,1,3]}";
  124. // 解析json数据
  125. jsonRoot = RyanJsonParse(jsonstr);
  126. if (jsonRoot == NULL)
  127. {
  128. printf("%s:%d 序列化失败\r\n", __FILE__, __LINE__);
  129. return -1;
  130. }
  131. RyanJsonChangeStringValue(RyanJsonGetObjectByKey(jsonRoot, "name"), "Ryan");
  132. if (0 != strcmp("Ryan", RyanJsonGetStringValue(RyanJsonGetObjectByKey(jsonRoot, "name"))))
  133. {
  134. printf("%s:%d 修改失败\r\n", __FILE__, __LINE__);
  135. RyanJsonDelete(jsonRoot);
  136. return -1;
  137. }
  138. RyanJsonReplaceByKey(jsonRoot, "star", RyanJsonCreateString("", "123456"));
  139. // 将序列化的数据以有格式样式打印出来
  140. uint32_t len = 0;
  141. str = RyanJsonPrint(jsonRoot, 250, RyanJsonTrue, &len);
  142. printf("strLen: %d, data: %s\r\n", len, str);
  143. RyanJsonFree(str);
  144. // 删除json对象
  145. RyanJsonDelete(jsonRoot);
  146. return 0;
  147. }
  148. int RyanJsonExample(void)
  149. {
  150. RyanJsonInitHooks(v_malloc, v_free, v_realloc);
  151. printf("\r\n--------------------------- RyanJson 生成示例 --------------------------\r\n");
  152. createJsonExample();
  153. printf("\r\n--------------------------- RyanJson 序列化json文本示例 --------------------------\r\n");
  154. loadJsonExample();
  155. printf("\r\n--------------------------- RyanJson 修改json示例 --------------------------\r\n");
  156. changeJsonExample();
  157. return -1;
  158. }