| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- #include "RyanJsonBaseTest.h"
- /* --------------------------------------------------------------------- */
- RyanJsonBool_e RyanJsonBaseTestReplaceJson(void)
- {
- 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}],"
- "\"string2222\":\"hello\"}";
- RyanJson_t json = RyanJsonParse(jsonstr);
- RyanJsonCheckReturnFalse(NULL != json);
- /* ---------------- 保留原有测试(并补充校验) ---------------- */
- // 数组替换测试:arrayInt 头
- RyanJsonReplaceByIndex(RyanJsonGetObjectToKey(json, "arrayInt"), 0, RyanJsonCreateString(NULL, "arrayInt"));
- {
- RyanJson_t v = RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayInt"), 0);
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "arrayInt") == 0, { goto err; });
- }
- // 数组替换测试:arrayInt 尾
- {
- RyanJson_t arr = RyanJsonGetObjectToKey(json, "arrayInt");
- uint32_t last = RyanJsonGetSize(arr) - 1;
- RyanJsonReplaceByIndex(arr, last, RyanJsonCreateString(NULL, "arrayInt"));
- RyanJson_t v = RyanJsonGetObjectToIndex(arr, last);
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "arrayInt") == 0, { goto err; });
- }
- // 数组对象替换测试:arrayItem[0]
- RyanJsonReplaceByIndex(RyanJsonGetObjectToKey(json, "arrayItem"), 0, RyanJsonCreateString(NULL, "arrayItem"));
- {
- RyanJson_t v = RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayItem"), 0);
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "arrayItem") == 0, { goto err; });
- }
- // 数组对象替换测试:arrayItem[1]
- RyanJsonReplaceByIndex(RyanJsonGetObjectToKey(json, "arrayItem"), 1, RyanJsonCreateString(NULL, "arrayItem"));
- {
- RyanJson_t v = RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayItem"), 1);
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "arrayItem") == 0, { goto err; });
- }
- // 对象字段替换:inter -> 999
- RyanJsonReplaceByKey(json, "inter", RyanJsonCreateInt("inter", 999));
- {
- RyanJson_t v = RyanJsonGetObjectToKey(json, "inter");
- RyanJsonCheckCode(RyanJsonIsInt(v), { goto err; });
- RyanJsonCheckCode(RyanJsonGetIntValue(v) == 999, { goto err; });
- }
- // 对象字段替换:double -> 123.45
- RyanJsonReplaceByKey(json, "double", RyanJsonCreateDouble("double", 123.45));
- {
- RyanJson_t v = RyanJsonGetObjectToKey(json, "double");
- RyanJsonCheckCode(RyanJsonIsDouble(v), { goto err; });
- RyanJsonCheckCode(RyanJsonGetDoubleValue(v) == 123.45, { goto err; });
- }
- // 对象字段替换:string -> "newString"
- RyanJsonReplaceByKey(json, "string", RyanJsonCreateString("string", "newString"));
- {
- RyanJson_t v = RyanJsonGetObjectToKey(json, "string");
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "newString") == 0, { goto err; });
- }
- // 对象字段替换:boolFalse -> true
- RyanJsonReplaceByKey(json, "boolFalse", RyanJsonCreateBool("boolFalse", RyanJsonTrue));
- {
- RyanJson_t v = RyanJsonGetObjectToKey(json, "boolFalse");
- RyanJsonCheckCode(RyanJsonIsBool(v), { goto err; });
- RyanJsonCheckCode(RyanJsonGetBoolValue(v) == RyanJsonTrue, { goto err; });
- }
- // 数组替换:arrayInt 中间元素 -> "midInt"
- RyanJsonReplaceByIndex(RyanJsonGetObjectToKey(json, "arrayInt"), 2, RyanJsonCreateString(NULL, "midInt"));
- {
- RyanJson_t v = RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayInt"), 2);
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "midInt") == 0, { goto err; });
- }
- RyanJsonReplaceByIndex(RyanJsonGetObjectToKey(json, "arrayString"), 1, RyanJsonCreateString(NULL, "headString"));
- {
- RyanJson_t v = RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "arrayString"), 1);
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "headString") == 0, { goto err; });
- }
- {
- RyanJson_t arr = RyanJsonGetObjectToKey(json, "arrayString");
- uint32_t last = RyanJsonGetSize(arr) - 1;
- RyanJsonReplaceByIndex(arr, last, RyanJsonCreateString(NULL, "tailString"));
- RyanJson_t v = RyanJsonGetObjectToIndex(arr, last);
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "tailString") == 0, { goto err; });
- }
- // 数组对象替换:arrayItem 尾部 -> "arrayItemTail"
- {
- RyanJson_t arr = RyanJsonGetObjectToKey(json, "arrayItem");
- uint32_t last = RyanJsonGetSize(arr) - 1;
- RyanJsonReplaceByIndex(arr, last, RyanJsonCreateString(NULL, "arrayItemTail"));
- RyanJson_t v = RyanJsonGetObjectToIndex(arr, last);
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "arrayItemTail") == 0, { goto err; });
- }
- // 嵌套对象替换:item.inter -> 111
- RyanJsonReplaceByKey(RyanJsonGetObjectToKey(json, "item"), "inter", RyanJsonCreateInt("inter", 111));
- {
- RyanJson_t v = RyanJsonGetObjectToKey(RyanJsonGetObjectToKey(json, "item"), "inter");
- RyanJsonCheckCode(RyanJsonIsInt(v), { goto err; });
- RyanJsonCheckCode(RyanJsonGetIntValue(v) == 111, { goto err; });
- }
- // 嵌套对象替换:item.string -> "nestedReplace"
- RyanJsonReplaceByKey(RyanJsonGetObjectToKey(json, "item"), "string", RyanJsonCreateString("string", "nestedReplace"));
- {
- RyanJson_t v = RyanJsonGetObjectToKey(RyanJsonGetObjectToKey(json, "item"), "string");
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "nestedReplace") == 0, { goto err; });
- }
- // 混合数组替换:各类型位置
- // 0:int -> "intReplaced"
- RyanJsonReplaceByIndex(RyanJsonGetObjectToKey(json, "array"), 0, RyanJsonCreateString(NULL, "intReplaced"));
- {
- RyanJson_t v = RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "array"), 0);
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "intReplaced") == 0, { goto err; });
- }
- // 1:double -> "doubleReplaced"
- RyanJsonReplaceByIndex(RyanJsonGetObjectToKey(json, "array"), 1, RyanJsonCreateString(NULL, "doubleReplaced"));
- {
- RyanJson_t v = RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "array"), 1);
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "doubleReplaced") == 0, { goto err; });
- }
- // 2:string -> "stringReplaced"
- RyanJsonReplaceByIndex(RyanJsonGetObjectToKey(json, "array"), 2, RyanJsonCreateString(NULL, "stringReplaced"));
- {
- RyanJson_t v = RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "array"), 2);
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "stringReplaced") == 0, { goto err; });
- }
- // 3:bool -> "boolReplaced"
- RyanJsonReplaceByIndex(RyanJsonGetObjectToKey(json, "array"), 3, RyanJsonCreateString(NULL, "boolReplaced"));
- {
- RyanJson_t v = RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "array"), 3);
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "boolReplaced") == 0, { goto err; });
- }
- // 5:null -> "nullReplaced"
- RyanJsonReplaceByIndex(RyanJsonGetObjectToKey(json, "array"), 5, RyanJsonCreateString(NULL, "nullReplaced"));
- {
- RyanJson_t v = RyanJsonGetObjectToIndex(RyanJsonGetObjectToKey(json, "array"), 5);
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "nullReplaced") == 0, { goto err; });
- }
- // 对象替换测试:arrayString -> "arrayString2222"
- RyanJsonReplaceByKey(json, "arrayString", RyanJsonCreateString("", "arrayString2222"));
- {
- RyanJson_t v = RyanJsonGetObjectToKey(json, "arrayString");
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "arrayString2222") == 0, { goto err; });
- }
- // 修改数组节点为对象节点:arrayDouble -> duplicate(item)
- RyanJson_t duplicateJson = RyanJsonDuplicate(RyanJsonGetObjectToKey(json, "item"));
- RyanJsonReplaceByKey(json, "arrayDouble", duplicateJson);
- {
- RyanJson_t v = RyanJsonGetObjectToKey(json, "arrayDouble");
- RyanJsonCheckCode(RyanJsonIsObject(v), { goto err; });
- }
- // 替换普通 key 的值:string2222 -> "world"
- RyanJsonReplaceByKey(json, "string2222", RyanJsonCreateString("string2222", "world"));
- {
- RyanJson_t v = RyanJsonGetObjectToKey(json, "string2222");
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "world") == 0, { goto err; });
- }
- // 替换布尔值:boolTrue -> false
- RyanJsonReplaceByKey(json, "boolTrue", RyanJsonCreateBool("boolTrue", RyanJsonFalse));
- {
- RyanJson_t v = RyanJsonGetObjectToKey(json, "boolTrue");
- RyanJsonCheckCode(RyanJsonIsBool(v), { goto err; });
- RyanJsonCheckCode(RyanJsonGetBoolValue(v) == RyanJsonFalse, { goto err; });
- }
- // 替换 null:null -> "notNull"
- RyanJsonReplaceByKey(json, "null", RyanJsonCreateString("null", "notNull"));
- {
- RyanJson_t v = RyanJsonGetObjectToKey(json, "null");
- RyanJsonCheckCode(RyanJsonIsString(v), { goto err; });
- RyanJsonCheckCode(strcmp(RyanJsonGetStringValue(v), "notNull") == 0, { goto err; });
- }
- char *str = RyanJsonPrint(json, 1024, RyanJsonTrue, NULL);
- RyanJsonFree(str);
- RyanJsonDelete(json);
- return RyanJsonTrue;
- err:
- RyanJsonDelete(json);
- return RyanJsonFalse;
- }
|