//+------------------------------------------------------------------+ //| TestJsonBuilder.mq5 | //| AI-Toolkit | //+------------------------------------------------------------------+ #property script_show_inputs #include "../fast_json.mqh" void OnStart() { Print("=== JSON V3: THE BUILDER & UNICODE UPDATE ==="); //--------------------------------------------------------- // 1. UNICODE TEST //--------------------------------------------------------- Print("--- 1. Unicode Escape Support ---"); string json_uni = "{\"msg\": \"\\u0048\\u0065\\u006C\\u006C\\u006F\"}"; // Hello CJson doc_uni; if (doc_uni.Parse(json_uni)) { string msg = doc_uni["msg"].ToString(); Print("Encoded: \\u0048\\u0065\\u006C\\u006C\\u006F"); Print("Decoded: ", msg); if (msg == "Hello") Print("PASS: Unicode Basic"); else Print("FAIL: Unicode Decoding"); } else Print("FAIL: Unicode Parse Error"); //--------------------------------------------------------- // 2. BUILDER TEST //--------------------------------------------------------- Print("\n--- 2. CJsonBuilder Performance ---"); ulong t0 = GetMicrosecondCount(); CJsonBuilder b(1024); b.Obj() .Key("action") .Val("trade") .Key("params") .Obj() .Key("symbol") .Val("EURUSD") .Key("volume") .Val(0.1) .Key("magic") .Val(123456) .Key("comment") .Val("AI-Generated \u2764") // Heart emoji (native string) .EndObj() .Key("flags") .Arr() .Val(1) .Val(2) .Val(3) .EndArr() .EndObj(); string built = b.Build(); ulong t_build = GetMicrosecondCount() - t0; Print("Built JSON: ", built); Print("Build Time: ", t_build, " us"); // Verify Validity CJson check; if (check.Parse(built)) { if (check["params"]["symbol"].ToString() == "EURUSD" && check["flags"][1].ToInt() == 2) { Print("PASS: Builder Output is Valid JSON"); } else Print("FAIL: Builder Content Verification"); } else Print("FAIL: Builder produced invalid JSON"); //--------------------------------------------------------- // 3. SAFE ACCESSORS //--------------------------------------------------------- Print("\n--- 3. Safe Accessors ---"); CJsonNode root = check.GetRoot(); string missing = root["non_existent"].ToString("default_value"); Print("Missing Key (String): ", missing); if (missing == "default_value") Print("PASS: Safe String"); else Print("FAIL: Safe String"); double def_dbl = root["non_existent"].ToDouble(-1.0); Print("Missing Key (Double): ", def_dbl); if (def_dbl == -1.0) Print("PASS: Safe Double"); else Print("FAIL: Safe Double"); Print("=== TEST COMPLETE ==="); }