JSON

Constant JSON 

Source
pub const JSON: &str = "// JSON \u{5904}\u{7406}\u{5de5}\u{5177}\u{5e93}\n// JSON Processing Utilities\n// \u{63d0}\u{4f9b} JSON \u{6570}\u{636e}\u{7684}\u{9ad8}\u{7ea7}\u{5904}\u{7406}\u{529f}\u{80fd}\n\n// ============================================================\n// JSON \u{683c}\u{5f0f}\u{5316}\u{548c}\u{7f8e}\u{5316}\n// ============================================================\n\n// JSON_PRETTY - \u{683c}\u{5f0f}\u{5316} JSON \u{5b57}\u{7b26}\u{4e32}\u{ff0c}\u{4f7f}\u{5176}\u{66f4}\u{6613}\u{8bfb}\n// \u{53c2}\u{6570}:\n//   JSON_STR - JSON \u{5b57}\u{7b26}\u{4e32}\n//   INDENT - \u{7f29}\u{8fdb}\u{7a7a}\u{683c}\u{6570}\u{ff08}\u{9ed8}\u{8ba4}\u{4e3a} 2\u{ff09}\n// \u{8fd4}\u{56de}: \u{683c}\u{5f0f}\u{5316}\u{540e}\u{7684} JSON \u{5b57}\u{7b26}\u{4e32}\nFunc JSON_PRETTY(JSON_STR, INDENT) {\n    Set OBJ JSON_PARSE(JSON_STR)\n    Return JSON_STRINGIFY(OBJ, INDENT)\n}\n\n// JSON_PRETTY_DEFAULT - \u{4f7f}\u{7528}\u{9ed8}\u{8ba4}\u{7f29}\u{8fdb}\u{ff08}2\u{7a7a}\u{683c}\u{ff09}\u{683c}\u{5f0f}\u{5316} JSON\nFunc JSON_PRETTY_DEFAULT(JSON_STR) {\n    Return JSON_PRETTY(JSON_STR, 2)\n}\n\n// ============================================================\n// JSON \u{8def}\u{5f84}\u{8bbf}\u{95ee}\n// ============================================================\n\n// JSON_GET_PATH - \u{901a}\u{8fc7}\u{8def}\u{5f84}\u{8bbf}\u{95ee}\u{5d4c}\u{5957} JSON \u{5bf9}\u{8c61}\n// \u{53c2}\u{6570}:\n//   OBJ - JSON \u{5bf9}\u{8c61}\u{ff08}\u{5b57}\u{5178}\u{ff09}\n//   PATH - \u{70b9}\u{5206}\u{9694}\u{7684}\u{8def}\u{5f84}\u{5b57}\u{7b26}\u{4e32}\u{ff0c}\u{5982} \"user.address.city\"\n// \u{8fd4}\u{56de}: \u{8def}\u{5f84}\u{5bf9}\u{5e94}\u{7684}\u{503c}\u{ff0c}\u{5982}\u{679c}\u{8def}\u{5f84}\u{4e0d}\u{5b58}\u{5728}\u{8fd4}\u{56de} Null\n// \u{793a}\u{4f8b}:\n//   Set DATA {\"user\": {\"name\": \"Alice\", \"address\": {\"city\": \"Beijing\"}}}\n//   Set CITY JSON_GET_PATH(DATA, \"user.address.city\")  // \"Beijing\"\nFunc JSON_GET_PATH(OBJ, PATH) {\n    Set PARTS SPLIT(PATH, \".\")\n    Set CURRENT OBJ\n    Set I 0\n    Set LEN_PARTS LEN(PARTS)\n    \n    While (I < LEN_PARTS) {\n        Set KEY PARTS[I]\n        If (TYPE(CURRENT) == \"Dict\") {\n            If (HAS(CURRENT, KEY)) {\n                Set CURRENT CURRENT[KEY]\n            } Else {\n                Return Null\n            }\n        } Else {\n            Return Null\n        }\n        Set I (I + 1)\n    }\n    \n    Return CURRENT\n}\n\n// JSON_SET_PATH - \u{5728}\u{5d4c}\u{5957} JSON \u{5bf9}\u{8c61}\u{4e2d}\u{8bbe}\u{7f6e}\u{503c}\n// \u{53c2}\u{6570}:\n//   OBJ - JSON \u{5bf9}\u{8c61}\u{ff08}\u{5b57}\u{5178}\u{ff09}\n//   PATH - \u{70b9}\u{5206}\u{9694}\u{7684}\u{8def}\u{5f84}\u{5b57}\u{7b26}\u{4e32}\n//   VALUE - \u{8981}\u{8bbe}\u{7f6e}\u{7684}\u{503c}\n// \u{8fd4}\u{56de}: \u{4fee}\u{6539}\u{540e}\u{7684}\u{5bf9}\u{8c61}\u{ff08}\u{4e0d}\u{6539}\u{53d8}\u{539f}\u{5bf9}\u{8c61}\u{ff09}\nFunc JSON_SET_PATH(OBJ, PATH, VALUE) {\n    Set PARTS SPLIT(PATH, \".\")\n    Set RESULT CLONE(OBJ)\n    Set LEN_PARTS LEN(PARTS)\n    \n    If (LEN_PARTS == 0) {\n        Return RESULT\n    }\n    \n    If (LEN_PARTS == 1) {\n        Set KEY PARTS[0]\n        Set RESULT[KEY] VALUE\n        Return RESULT\n    }\n    \n    // \u{7b80}\u{5316}\u{7248}\u{672c}\u{ff1a}\u{53ea}\u{652f}\u{6301}\u{5355}\u{5c42}\u{8def}\u{5f84}\n    Set KEY PARTS[0]\n    Set RESULT[KEY] VALUE\n    Return RESULT\n}\n\n// JSON_HAS_PATH - \u{68c0}\u{67e5}\u{8def}\u{5f84}\u{662f}\u{5426}\u{5b58}\u{5728}\n// \u{53c2}\u{6570}:\n//   OBJ - JSON \u{5bf9}\u{8c61}\n//   PATH - \u{8def}\u{5f84}\u{5b57}\u{7b26}\u{4e32}\n// \u{8fd4}\u{56de}: True \u{6216} False\nFunc JSON_HAS_PATH(OBJ, PATH) {\n    Set VALUE JSON_GET_PATH(OBJ, PATH)\n    Return (TYPE(VALUE) != \"Null\")\n}\n\n// ============================================================\n// JSON \u{5408}\u{5e76}\u{548c}\u{64cd}\u{4f5c}\n// ============================================================\n\n// JSON_MERGE - \u{6df1}\u{5ea6}\u{5408}\u{5e76}\u{4e24}\u{4e2a} JSON \u{5bf9}\u{8c61}\n// \u{53c2}\u{6570}:\n//   OBJ1 - \u{7b2c}\u{4e00}\u{4e2a}\u{5bf9}\u{8c61}\u{ff08}\u{57fa}\u{7840}\u{ff09}\n//   OBJ2 - \u{7b2c}\u{4e8c}\u{4e2a}\u{5bf9}\u{8c61}\u{ff08}\u{8986}\u{76d6}\u{ff09}\n// \u{8fd4}\u{56de}: \u{5408}\u{5e76}\u{540e}\u{7684}\u{65b0}\u{5bf9}\u{8c61}\nFunc JSON_MERGE(OBJ1, OBJ2) {\n    If (TYPE(OBJ1) != \"Dict\" || TYPE(OBJ2) != \"Dict\") {\n        Return OBJ2\n    }\n    \n    Set RESULT CLONE(OBJ1)\n    Set KEYS2 KEYS(OBJ2)\n    Set I 0\n    Set LEN_KEYS LEN(KEYS2)\n    \n    While (I < LEN_KEYS) {\n        Set KEY KEYS2[I]\n        Set VAL2 OBJ2[KEY]\n        \n        If (HAS(RESULT, KEY)) {\n            Set VAL1 RESULT[KEY]\n            If (TYPE(VAL1) == \"Dict\" && TYPE(VAL2) == \"Dict\") {\n                Set RESULT[KEY] JSON_MERGE(VAL1, VAL2)\n            } Else {\n                Set RESULT[KEY] VAL2\n            }\n        } Else {\n            Set RESULT[KEY] VAL2\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// JSON_MERGE_SHALLOW - \u{6d45}\u{5408}\u{5e76}\u{4e24}\u{4e2a} JSON \u{5bf9}\u{8c61}\n// \u{53ea}\u{5408}\u{5e76}\u{7b2c}\u{4e00}\u{5c42}\u{ff0c}\u{7b49}\u{540c}\u{4e8e} MERGE()\nFunc JSON_MERGE_SHALLOW(OBJ1, OBJ2) {\n    Return MERGE(OBJ1, OBJ2)\n}\n\n// ============================================================\n// JSON \u{6570}\u{7ec4}\u{64cd}\u{4f5c}\n// ============================================================\n\n// JSON_FILTER - \u{8fc7}\u{6ee4} JSON \u{6570}\u{7ec4}\n// \u{53c2}\u{6570}:\n//   ARR - JSON \u{6570}\u{7ec4}\n//   KEY - \u{8981}\u{68c0}\u{67e5}\u{7684}\u{952e}\n//   VALUE - \u{671f}\u{671b}\u{7684}\u{503c}\n// \u{8fd4}\u{56de}: \u{8fc7}\u{6ee4}\u{540e}\u{7684}\u{6570}\u{7ec4}\n// \u{793a}\u{4f8b}:\n//   Set USERS [{\"name\": \"Alice\", \"age\": 30}, {\"name\": \"Bob\", \"age\": 25}]\n//   Set RESULT JSON_FILTER(USERS, \"age\", 30)  // [{\"name\": \"Alice\", \"age\": 30}]\nFunc JSON_FILTER(ARR, KEY, VALUE) {\n    If (TYPE(ARR) != \"Array\") {\n        Return []\n    }\n    \n    Set RESULT []\n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        If (TYPE(ITEM) == \"Dict\" && HAS(ITEM, KEY)) {\n            Set ITEM_VALUE ITEM[KEY]\n            If (ITEM_VALUE == VALUE) {\n                Set RESULT PUSH(RESULT, ITEM)\n            }\n        }\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// JSON_PLUCK - \u{4ece}\u{6570}\u{7ec4}\u{4e2d}\u{63d0}\u{53d6}\u{6307}\u{5b9a}\u{952e}\u{7684}\u{6240}\u{6709}\u{503c}\n// \u{53c2}\u{6570}:\n//   ARR - JSON \u{6570}\u{7ec4}\u{ff08}\u{5305}\u{542b}\u{5b57}\u{5178}\u{ff09}\n//   KEY - \u{8981}\u{63d0}\u{53d6}\u{7684}\u{952e}\n// \u{8fd4}\u{56de}: \u{5305}\u{542b}\u{6240}\u{6709}\u{503c}\u{7684}\u{6570}\u{7ec4}\n// \u{793a}\u{4f8b}:\n//   Set USERS [{\"name\": \"Alice\", \"age\": 30}, {\"name\": \"Bob\", \"age\": 25}]\n//   Set NAMES JSON_PLUCK(USERS, \"name\")  // [\"Alice\", \"Bob\"]\nFunc JSON_PLUCK(ARR, KEY) {\n    If (TYPE(ARR) != \"Array\") {\n        Return []\n    }\n    \n    Set RESULT []\n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        If (TYPE(ITEM) == \"Dict\" && HAS(ITEM, KEY)) {\n            Set VALUE ITEM[KEY]\n            Set RESULT PUSH(RESULT, VALUE)\n        }\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// JSON_FIND - \u{5728}\u{6570}\u{7ec4}\u{4e2d}\u{67e5}\u{627e}\u{7b2c}\u{4e00}\u{4e2a}\u{5339}\u{914d}\u{7684}\u{5bf9}\u{8c61}\n// \u{53c2}\u{6570}:\n//   ARR - JSON \u{6570}\u{7ec4}\n//   KEY - \u{8981}\u{68c0}\u{67e5}\u{7684}\u{952e}\n//   VALUE - \u{671f}\u{671b}\u{7684}\u{503c}\n// \u{8fd4}\u{56de}: \u{7b2c}\u{4e00}\u{4e2a}\u{5339}\u{914d}\u{7684}\u{5bf9}\u{8c61}\u{ff0c}\u{5982}\u{679c}\u{6ca1}\u{6709}\u{627e}\u{5230}\u{8fd4}\u{56de} Null\nFunc JSON_FIND(ARR, KEY, VALUE) {\n    If (TYPE(ARR) != \"Array\") {\n        Return Null\n    }\n    \n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        If (TYPE(ITEM) == \"Dict\" && HAS(ITEM, KEY)) {\n            Set ITEM_VALUE ITEM[KEY]\n            If (ITEM_VALUE == VALUE) {\n                Return ITEM\n            }\n        }\n        Set I (I + 1)\n    }\n    \n    Return Null\n}\n\n// JSON_COUNT - \u{7edf}\u{8ba1}\u{6570}\u{7ec4}\u{4e2d}\u{5339}\u{914d}\u{6761}\u{4ef6}\u{7684}\u{5bf9}\u{8c61}\u{6570}\u{91cf}\n// \u{53c2}\u{6570}:\n//   ARR - JSON \u{6570}\u{7ec4}\n//   KEY - \u{8981}\u{68c0}\u{67e5}\u{7684}\u{952e}\n//   VALUE - \u{671f}\u{671b}\u{7684}\u{503c}\n// \u{8fd4}\u{56de}: \u{5339}\u{914d}\u{7684}\u{6570}\u{91cf}\nFunc JSON_COUNT(ARR, KEY, VALUE) {\n    If (TYPE(ARR) != \"Array\") {\n        Return 0\n    }\n    \n    Set COUNT 0\n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        If (TYPE(ITEM) == \"Dict\" && HAS(ITEM, KEY)) {\n            Set ITEM_VALUE ITEM[KEY]\n            If (ITEM_VALUE == VALUE) {\n                Set COUNT (COUNT + 1)\n            }\n        }\n        Set I (I + 1)\n    }\n    \n    Return COUNT\n}\n\n// ============================================================\n// JSON \u{8f6c}\u{6362}\u{548c}\u{9a8c}\u{8bc1}\n// ============================================================\n\n// JSON_VALIDATE - \u{9a8c}\u{8bc1}\u{5b57}\u{7b26}\u{4e32}\u{662f}\u{5426}\u{4e3a}\u{6709}\u{6548}\u{7684} JSON\n// \u{53c2}\u{6570}:\n//   STR - \u{8981}\u{9a8c}\u{8bc1}\u{7684}\u{5b57}\u{7b26}\u{4e32}\n// \u{8fd4}\u{56de}: True \u{6216} False\nFunc JSON_VALIDATE(STR) {\n    If (TYPE(STR) != \"String\") {\n        Return False\n    }\n    \n    // \u{5c1d}\u{8bd5}\u{89e3}\u{6790}\u{ff0c}\u{5982}\u{679c}\u{5931}\u{8d25}\u{5219}\u{8fd4}\u{56de} False\n    Set TRIMMED TRIM(STR)\n    If (LEN(TRIMMED) == 0) {\n        Return False\n    }\n    \n    // \u{7b80}\u{5355}\u{68c0}\u{67e5}\u{ff1a}\u{5fc5}\u{987b}\u{4ee5} { \u{6216} [\u{5f00}\u{5934}\n    Set FIRST STRSLICE(TRIMMED, 0, 1)\n    If (FIRST != \"{\" && FIRST != \"[\") {\n        Return False\n    }\n    \n    Return True\n}\n\n// JSON_TO_STRING - \u{5c06}\u{4efb}\u{610f}\u{503c}\u{8f6c}\u{6362}\u{4e3a} JSON \u{5b57}\u{7b26}\u{4e32}\n// \u{53c2}\u{6570}:\n//   VALUE - \u{4efb}\u{610f}\u{503c}\n// \u{8fd4}\u{56de}: JSON \u{5b57}\u{7b26}\u{4e32}\nFunc JSON_TO_STRING(VALUE) {\n    Set VAL_TYPE TYPE(VALUE)\n    \n    If (VAL_TYPE == \"Dict\" || VAL_TYPE == \"Array\") {\n        Return JSON_STRINGIFY(VALUE)\n    } Elif (VAL_TYPE == \"String\") {\n        Return \"\\\"\" + VALUE + \"\\\"\"\n    } Elif (VAL_TYPE == \"Null\") {\n        Return \"null\"\n    } Elif (VAL_TYPE == \"Boolean\") {\n        If (VALUE) {\n            Return \"true\"\n        } Else {\n            Return \"false\"\n        }\n    } Else {\n        Return TO_STRING(VALUE)\n    }\n}\n\n// JSON_FROM_STRING - \u{4ece} JSON \u{5b57}\u{7b26}\u{4e32}\u{89e3}\u{6790}\u{503c}\n// \u{53c2}\u{6570}:\n//   STR - JSON \u{5b57}\u{7b26}\u{4e32}\n// \u{8fd4}\u{56de}: \u{89e3}\u{6790}\u{540e}\u{7684}\u{503c}\nFunc JSON_FROM_STRING(STR) {\n    Return JSON_PARSE(STR)\n}\n\n// ============================================================\n// JSON \u{5b9e}\u{7528}\u{5de5}\u{5177}\n// ============================================================\n\n// JSON_KEYS_DEEP - \u{83b7}\u{53d6}\u{6240}\u{6709}\u{5d4c}\u{5957}\u{952e}\u{ff08}\u{6241}\u{5e73}\u{5316}\u{8def}\u{5f84}\u{ff09}\n// \u{53c2}\u{6570}:\n//   OBJ - JSON \u{5bf9}\u{8c61}\n//   PREFIX - \u{524d}\u{7f00}\u{ff08}\u{5185}\u{90e8}\u{4f7f}\u{7528}\u{ff09}\n// \u{8fd4}\u{56de}: \u{6240}\u{6709}\u{952e}\u{7684}\u{6570}\u{7ec4}\nFunc JSON_KEYS_DEEP(OBJ, PREFIX) {\n    If (TYPE(OBJ) != \"Dict\") {\n        Return []\n    }\n    \n    Set RESULT []\n    Set OBJ_KEYS KEYS(OBJ)\n    Set I 0\n    Set LEN_KEYS LEN(OBJ_KEYS)\n    \n    While (I < LEN_KEYS) {\n        Set KEY OBJ_KEYS[I]\n        Set FULL_KEY KEY\n        If (TYPE(PREFIX) == \"String\" && LEN(PREFIX) > 0) {\n            Set FULL_KEY (PREFIX + \".\" + KEY)\n        }\n        \n        Set RESULT PUSH(RESULT, FULL_KEY)\n        \n        Set VALUE OBJ[KEY]\n        If (TYPE(VALUE) == \"Dict\") {\n            Set SUB_KEYS JSON_KEYS_DEEP(VALUE, FULL_KEY)\n            Set J 0\n            Set SUB_LEN LEN(SUB_KEYS)\n            While (J < SUB_LEN) {\n                Set RESULT PUSH(RESULT, SUB_KEYS[J])\n                Set J (J + 1)\n            }\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// JSON_SIZE - \u{8ba1}\u{7b97} JSON \u{5bf9}\u{8c61}\u{7684}\u{5927}\u{5c0f}\u{ff08}\u{952e}\u{503c}\u{5bf9}\u{6570}\u{91cf}\u{6216}\u{6570}\u{7ec4}\u{957f}\u{5ea6}\u{ff09}\n// \u{53c2}\u{6570}:\n//   OBJ - JSON \u{5bf9}\u{8c61}\u{6216}\u{6570}\u{7ec4}\n// \u{8fd4}\u{56de}: \u{5927}\u{5c0f}\nFunc JSON_SIZE(OBJ) {\n    Set OBJ_TYPE TYPE(OBJ)\n    If (OBJ_TYPE == \"Dict\") {\n        Return LEN(KEYS(OBJ))\n    } Elif (OBJ_TYPE == \"Array\") {\n        Return LEN(OBJ)\n    } Else {\n        Return 0\n    }\n}\n\n// JSON_IS_EMPTY - \u{68c0}\u{67e5} JSON \u{5bf9}\u{8c61}\u{6216}\u{6570}\u{7ec4}\u{662f}\u{5426}\u{4e3a}\u{7a7a}\n// \u{53c2}\u{6570}:\n//   OBJ - JSON \u{5bf9}\u{8c61}\u{6216}\u{6570}\u{7ec4}\n// \u{8fd4}\u{56de}: True \u{6216} False\nFunc JSON_IS_EMPTY(OBJ) {\n    Return (JSON_SIZE(OBJ) == 0)\n}\n\n";
Expand description

JSON 处理工具