RyanJsonBaseTestChangeJson.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include "RyanJsonBaseTest.h"
  2. /* --------------------------------------------------------------------- */
  3. RyanJsonBool_e RyanJsonBaseTestChangeJson(void)
  4. {
  5. char jsonstr[] =
  6. "{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null,"
  7. "\"item\":{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null},"
  8. "\"arrayInt\":[16,16,16,16,16],\"arrayDouble\":[16.89,16.89,16.89,16.89,16.89],"
  9. "\"arrayString\":[\"hello\",\"hello\",\"hello\",\"hello\",\"hello\"],"
  10. "\"array\":[16,16.89,\"hello\",true,false,null],"
  11. "\"arrayItem\":[{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null},"
  12. "{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null}],"
  13. "\"string2222\":\"hello\"}";
  14. RyanJson_t json = RyanJsonParse(jsonstr);
  15. RyanJsonCheckReturnFalse(NULL != json);
  16. /**
  17. * @brief 修改基本类型
  18. */
  19. RyanJsonChangeIntValue(RyanJsonGetObjectToKey(json, "inter"), 20);
  20. RyanJsonCheckCode(RyanJsonIsInt(RyanJsonGetObjectToKey(json, "inter")) &&
  21. 20 == RyanJsonGetIntValue(RyanJsonGetObjectToKey(json, "inter")),
  22. { goto err; });
  23. RyanJsonChangeDoubleValue(RyanJsonGetObjectToKey(json, "double"), 20.89);
  24. RyanJsonCheckCode(RyanJsonIsDouble(RyanJsonGetObjectToKey(json, "double")) &&
  25. compare_double(RyanJsonGetDoubleValue(RyanJsonGetObjectToKey(json, "double")), 20.89),
  26. { goto err; });
  27. RyanJsonChangeStringValue(RyanJsonGetObjectToKey(json, "string"), "world");
  28. RyanJsonCheckCode(RyanJsonIsString(RyanJsonGetObjectToKey(json, "string")) &&
  29. strcmp(RyanJsonGetStringValue(RyanJsonGetObjectToKey(json, "string")), "world") == 0,
  30. { goto err; });
  31. RyanJsonChangeBoolValue(RyanJsonGetObjectToKey(json, "boolTrue"), RyanJsonFalse);
  32. RyanJsonCheckCode(RyanJsonIsBool(RyanJsonGetObjectToKey(json, "boolTrue")) &&
  33. RyanJsonGetBoolValue(RyanJsonGetObjectToKey(json, "boolTrue")) == RyanJsonFalse,
  34. { goto err; });
  35. RyanJsonChangeBoolValue(RyanJsonGetObjectToKey(json, "boolFalse"), RyanJsonTrue);
  36. RyanJsonCheckCode(RyanJsonIsBool(RyanJsonGetObjectToKey(json, "boolFalse")) &&
  37. RyanJsonGetBoolValue(RyanJsonGetObjectToKey(json, "boolFalse")) == RyanJsonTrue,
  38. { goto err; });
  39. /**
  40. * @brief 修改数组元素 (arrayInt)
  41. */
  42. RyanJsonChangeIntValue(RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayInt"), 0), 99);
  43. RyanJsonCheckCode(RyanJsonIsInt(RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayInt"), 0)) &&
  44. RyanJsonGetIntValue(RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayInt"), 0)) == 99,
  45. { goto err; });
  46. /**
  47. * @brief 修改数组元素 (arrayDouble)
  48. */
  49. RyanJsonChangeDoubleValue(RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayDouble"), 1), 99.99);
  50. RyanJsonCheckCode(
  51. RyanJsonIsDouble(RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayDouble"), 1)) &&
  52. compare_double(RyanJsonGetDoubleValue(RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayDouble"), 1)),
  53. 99.99),
  54. { goto err; });
  55. /**
  56. * @brief 修改数组元素 (arrayString)
  57. */
  58. RyanJsonChangeStringValue(RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayString"), 2), "changedString");
  59. RyanJsonCheckCode(RyanJsonIsString(RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayString"), 2)) &&
  60. strcmp(RyanJsonGetStringValue(RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayString"), 2)),
  61. "changedString") == 0,
  62. { goto err; });
  63. /**
  64. * @brief 修改嵌套对象
  65. */
  66. RyanJsonChangeStringValue(RyanJsonGetObjectToKey(RyanJsonGetObjectToKey(json, "item"), "string"), "nestedWorld");
  67. RyanJsonCheckCode(RyanJsonIsString(RyanJsonGetObjectToKey(RyanJsonGetObjectToKey(json, "item"), "string")) &&
  68. strcmp(RyanJsonGetStringValue(RyanJsonGetObjectToKey(RyanJsonGetObjectToKey(json, "item"), "string")),
  69. "nestedWorld") == 0,
  70. { goto err; });
  71. /**
  72. * @brief 修改数组对象中的字段 (arrayItem[0].inter -> 123)
  73. */
  74. RyanJsonChangeIntValue(RyanJsonGetObjectToKey(RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayItem"), 0), "inter"),
  75. 123);
  76. RyanJsonCheckCode(
  77. RyanJsonIsInt(RyanJsonGetObjectToKey(RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayItem"), 0), "inter")) &&
  78. RyanJsonGetIntValue(RyanJsonGetObjectToKey(RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayItem"), 0),
  79. "inter")) == 123,
  80. { goto err; });
  81. char *str = RyanJsonPrint(json, 1024, RyanJsonTrue, NULL);
  82. RyanJsonFree(str);
  83. RyanJsonDelete(json);
  84. return RyanJsonTrue;
  85. err:
  86. RyanJsonDelete(json);
  87. return RyanJsonFalse;
  88. }