RyanJsonExample.c 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. #include <time.h>
  6. #include "./RyanJson/RyanJson.h"
  7. /**
  8. * @brief 生成json示例
  9. *
  10. * @return int
  11. */
  12. int createJsonExample()
  13. {
  14. char *str = NULL;
  15. RyanJson_t jsonRoot, item;
  16. // 对象生成测试
  17. jsonRoot = RyanJsonCreateObject();
  18. RyanJsonAddIntToObject(jsonRoot, "inter", 16);
  19. RyanJsonAddDoubleToObject(jsonRoot, "double", 16.89);
  20. RyanJsonAddStringToObject(jsonRoot, "string", "hello");
  21. RyanJsonAddBoolToObject(jsonRoot, "boolTrue", RyanJsonTrue);
  22. RyanJsonAddBoolToObject(jsonRoot, "boolFalse", RyanJsonFalse);
  23. RyanJsonAddNullToObject(jsonRoot, "null");
  24. // 添加子对象
  25. item = RyanJsonCreateObject();
  26. RyanJsonAddIntToObject(item, "inter", 16);
  27. RyanJsonAddDoubleToObject(item, "double", 16.89);
  28. RyanJsonAddStringToObject(item, "string", "hello");
  29. RyanJsonAddBoolToObject(item, "boolTrue", RyanJsonTrue);
  30. RyanJsonAddBoolToObject(item, "boolFalse", RyanJsonFalse);
  31. RyanJsonAddNullToObject(item, "null");
  32. RyanJsonAddItemToObject(jsonRoot, "item", item); // 将上面创建的item子对象添加到root父对象
  33. // 添加子数组
  34. int arrayInt[] = {16, 16, 16, 16, 16};
  35. RyanJsonAddItemToObject(jsonRoot, "arrayInt",
  36. RyanJsonCreateIntArray(arrayInt, sizeof(arrayInt) / sizeof(arrayInt[0])));
  37. double arrayDouble[] = {16.89, 16.89, 16.89, 16.89, 16.89};
  38. RyanJsonAddItemToObject(jsonRoot, "arrayDouble",
  39. RyanJsonCreateDoubleArray(arrayDouble, sizeof(arrayDouble) / sizeof(arrayDouble[0])));
  40. const char *arrayString[] = {"hello", "hello", "hello", "hello", "hello"};
  41. RyanJsonAddItemToObject(jsonRoot, "arrayString",
  42. RyanJsonCreateStringArray(arrayString, sizeof(arrayString) / sizeof(arrayString[0])));
  43. RyanJson_t array = RyanJsonCreateArray();
  44. RyanJsonAddIntToArray(array, 16);
  45. RyanJsonAddDoubleToArray(array, 16.89);
  46. RyanJsonAddStringToArray(array, "hello");
  47. RyanJsonAddBoolToArray(array, RyanJsonTrue);
  48. RyanJsonAddBoolToArray(array, RyanJsonFalse);
  49. RyanJsonAddNullToArray(array);
  50. RyanJsonAddItemToObject(jsonRoot, "array", array); // 将上面创建的item子对象数组添加到root父对象
  51. // 添加对象数组
  52. RyanJson_t arrayItem = RyanJsonCreateArray();
  53. item = RyanJsonCreateObject();
  54. RyanJsonAddIntToObject(item, "inter", 16);
  55. RyanJsonAddDoubleToObject(item, "double", 16.89);
  56. RyanJsonAddStringToObject(item, "string", "hello");
  57. RyanJsonAddBoolToObject(item, "boolTrue", RyanJsonTrue);
  58. RyanJsonAddBoolToObject(item, "boolFalse", RyanJsonFalse);
  59. RyanJsonAddNullToObject(item, "null");
  60. RyanJsonAddItemToObject(arrayItem, "item", item); // 将item对象添加到arrayItem数组里面
  61. item = RyanJsonCreateObject();
  62. RyanJsonAddIntToObject(item, "inter", 16);
  63. RyanJsonAddDoubleToObject(item, "double", 16.89);
  64. RyanJsonAddStringToObject(item, "string", "hello");
  65. RyanJsonAddBoolToObject(item, "boolTrue", RyanJsonTrue);
  66. RyanJsonAddBoolToObject(item, "boolFalse", RyanJsonFalse);
  67. RyanJsonAddNullToObject(item, "null");
  68. RyanJsonAddItemToObject(arrayItem, "item", item); // 将item对象添加到arrayItem数组里面
  69. RyanJsonAddItemToObject(jsonRoot, "arrayItem", arrayItem); // 将arrayItem数组添加到root父对象
  70. uint32_t len = 0;
  71. str = RyanJsonPrint(jsonRoot, 250, RyanJsonTrue, &len); // 以带格式方式将数据打印出来
  72. printf("strLen: %d, data: %s\r\n", len, str);
  73. RyanJsonFree(str);
  74. RyanJsonDelete(jsonRoot);
  75. return 1;
  76. }
  77. /**
  78. * @brief 序列化json文本示例
  79. *
  80. * @return int
  81. */
  82. int loadJsonExample()
  83. {
  84. char *str = NULL;
  85. RyanJson_t jsonRoot;
  86. 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}]}";
  87. // 解析json数据
  88. jsonRoot = RyanJsonParse(jsonstr);
  89. if (jsonRoot == NULL)
  90. {
  91. printf("%s:%d 序列化失败\r\n", __FILE__, __LINE__);
  92. return 0;
  93. }
  94. // 将序列化的数据以无格式样式打印出来,并和原始数据进行对比
  95. str = RyanJsonPrint(jsonRoot, 250, RyanJsonFalse, NULL);
  96. if (strcmp(str, jsonstr) != 0)
  97. {
  98. printf("%s:%d 序列化与反序列化后的数据不对应\r\n", __FILE__, __LINE__);
  99. RyanJsonFree(str);
  100. return 0;
  101. }
  102. // 将序列化的数据以有格式样式打印出来
  103. uint32_t len = 0;
  104. str = RyanJsonPrint(jsonRoot, 250, RyanJsonTrue, &len);
  105. printf("strLen: %d, data: %s\r\n", len, str);
  106. RyanJsonFree(str);
  107. // 删除json对象
  108. RyanJsonDelete(jsonRoot);
  109. return 1;
  110. }
  111. int RyanJsonExample(void)
  112. {
  113. printf("\r\n--------------------------- RyanJson 生成示例 --------------------------\r\n");
  114. createJsonExample();
  115. printf("\r\n--------------------------- RyanJson 序列化json文本示例 --------------------------\r\n");
  116. loadJsonExample();
  117. return 0;
  118. }