注册 登录
发贴工具
查看: 6|回复: 0
打印 上一主题 下一主题

[24小时收录超级好的网站] JSON.stringify 和 JSON.parse 完整示例

[复制链接]

2447

主题

2495

帖子

1万

积分

积分
14886
跳转到指定楼层
楼主
JSON.stringify 和 JSON.parse 完整示例
JSON.stringify 和 JSON.parse 完整示例 群发软件发帖工具

JSON.stringify 和 JSON.parse 完整示例 群发软件发帖工具

  1. // JSON.stringify 和 JSON.parse 完整示例 - AIWROK IDE 开发 (ES5 兼容)
  2. // 展示从基础到高级的所有 JSON 处理技巧
  3. // ES5系统安卓 JavaScript引擎Rhino     
  4. //🍎交流QQ群711841924群一,苹果内测群,528816639


  5. logWindow.show()
  6. logWindow.setAlpha(300)
  7. logWindow.setHeight(2000)
  8. logWindow.setWidth(1800)

  9. // Rhino兼容的日期格式化函数
  10. function formatDateToString(date) {
  11.   if (!(date instanceof Date)) {
  12.     return date;
  13.   }
  14.   
  15.   var year = date.getFullYear();
  16.   var month = date.getMonth() + 1;
  17.   var day = date.getDate();
  18.   var hours = date.getHours();
  19.   var minutes = date.getMinutes();
  20.   var seconds = date.getSeconds();
  21.   var milliseconds = date.getMilliseconds();
  22.   
  23.   // 补零函数
  24.   function pad(num) {
  25.     return num < 10 ? '0' + num : '' + num;
  26.   }
  27.   
  28.   // 补零函数(3位毫秒)
  29.   function pad3(num) {
  30.     if (num < 10) return '00' + num;
  31.     if (num < 100) return '0' + num;
  32.     return '' + num;
  33.   }
  34.   
  35.   return year + '-' + pad(month) + '-' + pad(day) + 'T' +
  36.          pad(hours) + ':' + pad(minutes) + ':' + pad(seconds) +
  37.          '.' + pad3(milliseconds) + 'Z';
  38. }

  39. // Rhino兼容的日期解析函数
  40. function parseDateFromString(dateString) {
  41.   if (typeof dateString !== 'string') {
  42.     return dateString;
  43.   }
  44.   
  45.   // 检查是否是标准日期格式
  46.   var dateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$/;
  47.   if (!dateRegex.test(dateString)) {
  48.     return dateString;
  49.   }
  50.   
  51.   try {
  52.     return new Date(dateString);
  53.   } catch (err) {
  54.     printl("日期解析错误:", err);
  55.     print.log("无法解析日期字符串:", dateString);
  56.     return dateString;
  57.   }
  58. }

  59. // ==================== 1. 基础用法 ====================
  60. var user = {
  61.   name: 'AIWROK Developer',
  62.   age: 25,
  63.   skills: ['JavaScript', 'React Native', 'Node.js'],
  64.   active: true
  65. };

  66. printl("1. 基础用法");
  67. print.log("=== JSON 基础用法 ===");

  68. // 基本序列化
  69. var jsonStr = JSON.stringify(user);
  70. printl("序列化结果:", jsonStr);
  71. print.log("JSON.stringify(user):", jsonStr);

  72. // 基本反序列化
  73. var parsedUser = JSON.parse(jsonStr);
  74. printl("反序列化结果:", parsedUser);
  75. print.log("JSON.parse(jsonStr):", parsedUser);

  76. // ==================== 2. 美化输出 ====================
  77. printl("");
  78. print.log("=== 2. 美化输出 ===");

  79. var config = {
  80.   app: 'AIWROK IDE',
  81.   version: '2.1.0',
  82.   settings: {
  83.     theme: 'dark',
  84.     autoSave: true,
  85.     ai: {
  86.       enabled: true,
  87.       suggestions: true
  88.     }
  89.   }
  90. };

  91. printl("原始配置对象:", config);
  92. print.log("config对象:", config);

  93. // 美化输出
  94. var prettyConfig = JSON.stringify(config, null, 2);
  95. printl("美化输出结果:", prettyConfig);
  96. print.log("JSON.stringify(config, null, 2):", prettyConfig);

  97. // ==================== 3. 自定义序列化 (replacer) ====================
  98. printl("");
  99. print.log("=== 3. 自定义序列化 (replacer) ===");

  100. var dataWithDate = {
  101.   name: 'AIWROK 配置',
  102.   created: new Date('2023-06-01'),
  103.   lastModified: new Date(),
  104.   version: '1.0.0',
  105.   features: ['darkMode', 'autoSave', 'aiSuggestions']
  106. };

  107. printl("包含Date对象的数据:", dataWithDate);
  108. print.log("原始dataWithDate:", dataWithDate);

  109. // 自定义 replacer 函数,将 Date 转换为字符串
  110. var serializedData = JSON.stringify(dataWithDate, function(key, value) {
  111.   if (value instanceof Date) {
  112.     return formatDateToString(value);
  113.   }
  114.   return value;
  115. }, 2);

  116. printl("序列化后 (Date转字符串):", serializedData);
  117. print.log("使用replacer后的JSON:", serializedData);

  118. // ==================== 4. 自定义反序列化 (reviver) ====================
  119. printl("");
  120. print.log("=== 4. 自定义反序列化 (reviver) ===");

  121. // 自定义反序列化函数
  122. function customReviver(key, value) {
  123.   // 检查是否是日期字符串格式
  124.   return parseDateFromString(value);
  125. }

  126. printl("自定义reviver函数已定义");
  127. print.log("customReviver函数: 自动转换日期字符串为Date对象");

  128. var deserializedData = JSON.parse(serializedData, customReviver);
  129. printl("反序列化结果:", deserializedData);
  130. print.log("JSON.parse(serializedData, customReviver):", deserializedData);

  131. // ==================== 5. 属性过滤 ====================
  132. printl("");
  133. print.log("=== 5. 属性过滤 ===");

  134. // 过滤敏感信息的函数
  135. var sensitiveData = {
  136.   id: 12345,
  137.   username: 'aiwrok_dev',
  138.   email: 'dev@aiwrok.com',
  139.   password: 'secret123',
  140.   accessToken: 'abc123xyz',
  141.   profile: {
  142.     realName: 'AIWROK Developer',
  143.     phone: '13800138000',
  144.     address: '北京市朝阳区'
  145.   }
  146. };

  147. printl("原始敏感数据:", sensitiveData);
  148. print.log("包含密码等敏感信息的数据:", sensitiveData);

  149. var filteredJson = JSON.stringify(sensitiveData, function(key, value) {
  150.   if (key === 'password' || key === 'accessToken' || key === 'phone' || key === 'address') {
  151.     return undefined;
  152.   }
  153.   return value;
  154. }, 2);

  155. printl("过滤后的JSON:", filteredJson);
  156. print.log("移除敏感信息后的结果:", filteredJson);

  157. // ==================== 6. 数组处理 ====================
  158. printl("");
  159. print.log("=== 6. 数组处理 ===");

  160. var projects = [
  161.   {
  162.     name: 'AIWROK IDE',
  163.     type: 'ide',
  164.     technologies: ['React', 'Electron', 'Node.js'],
  165.     status: 'active',
  166.     startDate: new Date('2023-06-01')
  167.   },
  168.   {
  169.     name: 'AIWROK Web IDE',
  170.     type: 'web',
  171.     technologies: ['React', 'Node.js', 'Monaco Editor'],
  172.     status: 'planning',
  173.     startDate: new Date('2024-01-15')
  174.   },
  175.   {
  176.     name: 'AIWROK API',
  177.     type: 'api',
  178.     technologies: ['Express', 'MongoDB', 'JWT'],
  179.     status: 'active',
  180.     startDate: new Date('2023-09-01')
  181.   }
  182. ];

  183. printl("项目数组:", projects);
  184. print.log("包含Date对象的数组:", projects);

  185. // 序列化数组
  186. var projectsJson = JSON.stringify(projects, function(key, value) {
  187.   if (key === 'startDate') {
  188.     return formatDateToString(value);
  189.   }
  190.   return value;
  191. }, 2);

  192. printl("序列化后的项目数组:", projectsJson);
  193. print.log("Date对象转换为字符串:", projectsJson);

  194. // 反序列化数组
  195. var parsedProjects = JSON.parse(projectsJson, function(key, value) {
  196.   if (key === 'startDate') {
  197.     return parseDateFromString(value);
  198.   }
  199.   return value;
  200. });

  201. printl("反序列化后的项目数组:", parsedProjects);
  202. print.log("字符串转换回Date对象:", parsedProjects);

  203. // ==================== 7. 错误处理 ====================
  204. printl("");
  205. print.log("=== 7. 错误处理 ===");

  206. // 安全解析函数
  207. function safeParse(jsonString, fallback) {
  208.   fallback = fallback === undefined ? null : fallback;
  209.   try {
  210.     return JSON.parse(jsonString);
  211.   } catch (err) {
  212.     printl("JSON解析错误:", err);
  213.     print.log("解析失败,返回默认值:", fallback);
  214.     return fallback;
  215.   }
  216. }

  217. // 安全序列化函数 - 处理循环引用
  218. function safeStringify(obj, space) {
  219.   space = space === undefined ? 0 : space;
  220.   var visited = [];
  221.   
  222.   function replacer(key, value) {
  223.     if (typeof value === 'object' && value !== null) {
  224.       // 检查循环引用
  225.       if (visited.indexOf(value) !== -1) {
  226.         return '[Circular Reference]';
  227.       }
  228.       visited.push(value);
  229.     }
  230.     return value;
  231.   }
  232.   
  233.   try {
  234.     return JSON.stringify(obj, replacer, space);
  235.   } catch (err) {
  236.     printl("JSON序列化错误:", err);
  237.     print.log("序列化失败,返回空对象");
  238.     return '{}';
  239.   }
  240. }

  241. printl("安全解析和序列化函数已定义");
  242. print.log("包含错误处理的工具函数");

  243. // 测试有效和无效的 JSON
  244. var validJson = '{"message": "Hello, AIWROK!", "status": "success"}';
  245. var invalidJson = '{"message": "Hello, AIWROK!", "status": }';

  246. printl("测试有效JSON:", validJson);
  247. print.log("validJson:", validJson);

  248. var validResult = safeParse(validJson);
  249. printl("有效JSON解析结果:", validResult);
  250. print.log("safeParse(validJson):", validResult);

  251. printl("测试无效JSON:", invalidJson);
  252. print.log("invalidJson:", invalidJson);

  253. var invalidResult = safeParse(invalidJson);
  254. printl("无效JSON解析结果:", invalidResult);
  255. print.log("safeParse(invalidJson):", invalidResult);

  256. // 测试循环引用
  257. var circularObj = { name: 'AIWROK' };
  258. circularObj.self = circularObj;

  259. printl("测试循环引用对象:", safeStringify(circularObj, 2));
  260. print.log("circularObj包含自引用");

  261. var circularResult = safeStringify(circularObj);
  262. printl("循环引用序列化结果:", circularResult);
  263. print.log("safeStringify(circularObj):", circularResult);

  264. // ==================== 8. 实际应用示例 - 用户会话管理 ====================
  265. printl("");
  266. print.log("=== 8. 用户会话管理 ===");

  267. // 用户会话类
  268. function UserSession(userData) {
  269.   this.user = userData;
  270.   this.loginTime = new Date();
  271.   this.lastActivity = new Date();
  272.   this.sessionId = this.generateSessionId();
  273. }

  274. UserSession.prototype.generateSessionId = function() {
  275.   return 'sess_' + Math.random().toString(36).substr(2, 9);
  276. };

  277. UserSession.prototype.updateActivity = function() {
  278.   this.lastActivity = new Date();
  279. };

  280. UserSession.prototype.getSessionInfo = function() {
  281.   return {
  282.     sessionId: this.sessionId,
  283.     user: this.user,
  284.     loginTime: formatDateToString(this.loginTime),
  285.     lastActivity: formatDateToString(this.lastActivity),
  286.     isActive: this.isSessionActive()
  287.   };
  288. };

  289. UserSession.prototype.isSessionActive = function() {
  290.   var now = new Date();
  291.   var timeDiff = now - this.lastActivity;
  292.   return timeDiff < 30 * 60 * 1000; // 30分钟无活动视为过期
  293. };

  294. UserSession.prototype.serialize = function() {
  295.   var self = this;
  296.   return JSON.stringify(this, function(key, value) {
  297.     if (key === 'loginTime' || key === 'lastActivity') {
  298.       return formatDateToString(value);
  299.     }
  300.     // 避免序列化原型链上的方法
  301.     if (typeof value === 'function') {
  302.       return undefined;
  303.     }
  304.     return value;
  305.   });
  306. };

  307. UserSession.prototype.deserialize = function(jsonString) {
  308.   try {
  309.     var data = JSON.parse(jsonString);
  310.     this.user = data.user;
  311.     this.loginTime = parseDateFromString(data.loginTime);
  312.     this.lastActivity = parseDateFromString(data.lastActivity);
  313.     this.sessionId = data.sessionId;
  314.     return true;
  315.   } catch (err) {
  316.     printl("会话反序列化错误:", err);
  317.     print.log("恢复会话失败:", err);
  318.     return false;
  319.   }
  320. };

  321. printl("UserSession类已定义");
  322. print.log("包含序列化、反序列化等方法");

  323. // 创建用户会话
  324. var userData = {
  325.   id: 1001,
  326.   username: 'aiwrok_dev',
  327.   permissions: ['read', 'write', 'admin']
  328. };

  329. var session = new UserSession(userData);
  330. printl("创建用户会话:", session.getSessionInfo());
  331. print.log("session对象:", session.getSessionInfo());

  332. // 保存会话到本地存储
  333. var sessionJson = session.serialize();
  334. printl("序列化后的会话数据:", sessionJson);
  335. print.log("session.serialize():", sessionJson);

  336. var mockStorage = {
  337.   data: {},
  338.   setItem: function(key, value) {
  339.     this.data[key] = value;
  340.   },
  341.   getItem: function(key) {
  342.     return this.data[key];
  343.   }
  344. };

  345. mockStorage.setItem('aiwrok_user_session', sessionJson);
  346. printl("会话数据已保存到存储");
  347. print.log("保存到localStorage模拟");

  348. // 从本地存储恢复会话
  349. var restoredSession = new UserSession({});
  350. var sessionData = mockStorage.getItem('aiwrok_user_session');
  351. if (restoredSession.deserialize(sessionData)) {
  352.   printl("会话恢复成功:", restoredSession.getSessionInfo());
  353.   print.log("会话恢复成功:", restoredSession.getSessionInfo());
  354. } else {
  355.   printl("会话恢复失败");
  356.   print.log("恢复失败,可能是数据损坏");
  357. }

  358. // ==================== 9. 项目配置管理 ====================
  359. printl("");
  360. print.log("=== 9. 项目配置管理 ===");

  361. // 项目配置类
  362. function ProjectConfig() {
  363.   this.configs = {};
  364. }

  365. ProjectConfig.prototype.save = function(name, config) {
  366.   this.configs[name] = config;
  367. };

  368. ProjectConfig.prototype.get = function(name) {
  369.   return this.configs[name] || null;
  370. };

  371. ProjectConfig.prototype.getAll = function() {
  372.   return this.configs;
  373. };

  374. printl("ProjectConfig类已定义");
  375. print.log("配置管理类: save, get, getAll方法");

  376. var projectConfig = {
  377.   name: 'AIWROK IDE Project',
  378.   version: '2.1.0',
  379.   created: new Date('2023-06-01'),
  380.   lastModified: new Date(),
  381.   features: {
  382.     darkMode: true,
  383.     autoSave: true,
  384.     intelliSense: true,
  385.     codeFormatting: true
  386.   },
  387.   dependencies: {
  388.     core: ['react', 'react-native'],
  389.     dev: ['jest', 'eslint', 'prettier'],
  390.     ui: ['react-native-vector-icons', 'react-native-gesture-handler']
  391.   }
  392. };

  393. printl("项目配置对象:", projectConfig);
  394. print.log("包含Date对象和嵌套对象");

  395. // 保存项目配置到本地存储
  396. function saveProjectConfig(config) {
  397.   var serialized = JSON.stringify(config, function(key, value) {
  398.     if (value instanceof Date) {
  399.       return formatDateToString(value);
  400.     }
  401.     return value;
  402.   }, 2);
  403.   
  404.   // 模拟 localStorage 保存
  405.   mockStorage.setItem('aiwrok_project_config', serialized);
  406.   return serialized;
  407. }

  408. // 加载项目配置
  409. function loadProjectConfig() {
  410.   var stored = mockStorage.getItem('aiwrok_project_config');
  411.   if (!stored) return null;
  412.   
  413.   try {
  414.     return JSON.parse(stored, function(key, value) {
  415.       // 自动转换日期字符串为 Date 对象
  416.       if (key === 'created' || key === 'lastModified') {
  417.         return parseDateFromString(value);
  418.       }
  419.       return value;
  420.     });
  421.   } catch (err) {
  422.     printl("加载配置错误:", err);
  423.     print.log("配置解析失败:", err);
  424.     return null;
  425.   }
  426. }

  427. printl("配置保存和加载函数已定义");
  428. print.log("自动处理Date对象转换");

  429. var savedConfig = saveProjectConfig(projectConfig);
  430. printl("保存配置结果:", savedConfig);
  431. print.log("saveProjectConfig返回:", savedConfig);

  432. var loadedConfig = loadProjectConfig();
  433. printl("加载配置结果:", loadedConfig);
  434. print.log("loadProjectConfig返回:", loadedConfig);

  435. if (loadedConfig && loadedConfig.created instanceof Date) {
  436.   printl("Date对象恢复成功");
  437.   print.log("loadedConfig.created是Date对象:", loadedConfig.created);
  438. } else {
  439.   printl("Date对象恢复失败");
  440.   print.log("loadedConfig.created不是Date对象");
  441. }

  442. // ==================== 10. 代码片段管理 ====================
  443. printl("");
  444. print.log("=== 10. 代码片段管理 ===");

  445. // 代码片段存储
  446. function CodeSnippetManager() {
  447.   this.snippets = [];
  448. }

  449. CodeSnippetManager.prototype.addSnippet = function(name, language, code, description) {
  450.   description = description === undefined ? '' : description;
  451.   var snippet = {
  452.     id: Date.now(),
  453.     name: name,
  454.     language: language,
  455.     code: code,
  456.     description: description,
  457.     createdAt: new Date(),
  458.     tags: this.extractTags(code)
  459.   };
  460.   
  461.   this.snippets.push(snippet);
  462.   return snippet;
  463. };

  464. CodeSnippetManager.prototype.extractTags = function(code) {
  465.   var commonPatterns = {
  466.     'React': /import.*from\s+['"]react['"]/,
  467.     'React Native': /from\s+['"]react-native['"]/,
  468.     'API': /fetch\(|axios\./,
  469.     'Async': /async\s+|await\s+/,
  470.     'ES6': /const\s+|let\s+|=>/
  471.   };
  472.   
  473.   var tags = [];
  474.   for (var keyword in commonPatterns) {
  475.     if (commonPatterns.hasOwnProperty(keyword) && commonPatterns[keyword].test(code)) {
  476.       tags.push(keyword.toLowerCase());
  477.     }
  478.   }
  479.   return tags;
  480. };

  481. CodeSnippetManager.prototype.searchSnippets = function(keyword) {
  482.   return this.snippets.filter(function(snippet) {
  483.     return snippet.name.toLowerCase().indexOf(keyword.toLowerCase()) !== -1 ||
  484.            snippet.code.toLowerCase().indexOf(keyword.toLowerCase()) !== -1 ||
  485.            snippet.description.toLowerCase().indexOf(keyword.toLowerCase()) !== -1 ||
  486.            snippet.tags.some(function(tag) { return tag.indexOf(keyword.toLowerCase()) !== -1; });
  487.   });
  488. };

  489. CodeSnippetManager.prototype.exportSnippets = function() {
  490.   return JSON.stringify(this.snippets, function(key, value) {
  491.     if (key === 'createdAt') {
  492.       return formatDateToString(value);
  493.     }
  494.     return value;
  495.   }, 2);
  496. };

  497. CodeSnippetManager.prototype.importSnippets = function(jsonString) {
  498.   try {
  499.     var snippets = JSON.parse(jsonString, function(key, value) {
  500.       if (key === 'createdAt') {
  501.         return parseDateFromString(value);
  502.       }
  503.       return value;
  504.     });
  505.    
  506.     this.snippets = snippets;
  507.     return true;
  508.   } catch (err) {
  509.     printl("导入代码片段错误:", err);
  510.     print.log("导入失败:", err);
  511.     return false;
  512.   }
  513. };

  514. CodeSnippetManager.prototype.saveToStorage = function() {
  515.   var data = {
  516.     snippets: this.snippets,
  517.     exportedAt: new Date()
  518.   };
  519.   var serialized = JSON.stringify(data, function(key, value) {
  520.     if (value instanceof Date) {
  521.       return formatDateToString(value);
  522.     }
  523.     return value;
  524.   }, 2);
  525.   mockStorage.setItem('aiwrok_code_snippets', serialized);
  526. };

  527. CodeSnippetManager.prototype.loadFromStorage = function() {
  528.   var stored = mockStorage.getItem('aiwrok_code_snippets');
  529.   if (!stored) return false;
  530.   
  531.   try {
  532.     var data = JSON.parse(stored, function(key, value) {
  533.       if (key === 'exportedAt' || key === 'createdAt') {
  534.         return parseDateFromString(value);
  535.       }
  536.       return value;
  537.     });
  538.    
  539.     this.snippets = data.snippets;
  540.     return true;
  541.   } catch (err) {
  542.     printl("加载代码片段错误:", err);
  543.     print.log("加载失败:", err);
  544.     return false;
  545.   }
  546. };

  547. printl("CodeSnippetManager类已定义");
  548. print.log("包含添加、搜索、导入导出等功能");

  549. // 创建代码片段管理器
  550. var snippetManager = new CodeSnippetManager();
  551. printl("创建代码片段管理器");
  552. print.log("snippetManager实例已创建");

  553. // 添加示例代码片段
  554. var snippet1 = snippetManager.addSnippet(
  555.   'React Hook',
  556.   'javascript',
  557.   'import React from \'react\';\\n\\nvar MyComponent = function() {\\n  var data = null;\\n  var setData = function() {};\\n  \\n  // 模拟 useState\\n  // 模拟 useEffect\\n  // 模拟 fetch 数据\\n  function fetchData() {\\n    // 模拟 API 调用\\n    var result = { title: \'Example Title\' };\\n    setData(result);\\n  }\\n  \\n  return React.createElement(\'div\', null, data ? data.title : \'Loading...\');\\n};\\n\\nmodule.exports = MyComponent;',
  558.   'React 组件模板 (ES5 版本)'
  559. );

  560. printl("添加代码片段1:", snippet1.name);
  561. print.log("snippet1:", snippet1.name);

  562. var snippet2 = snippetManager.addSnippet(
  563.   'API 客户端',
  564.   'javascript',
  565.   'function ApiClient(baseURL) {\\n  this.baseURL = baseURL;\\n}\\n\\nApiClient.prototype.request = function(endpoint, options) {\\n  options = options === undefined ? {} : options;\\n  var url = this.baseURL + endpoint;\\n  var config = {\\n    headers: {\\n      \'Content-Type\': \'application/json\'\\n    }\\n  };\\n  \\n  // 合并选项\\n  for (var key in options) {\\n    if (options.hasOwnProperty(key)) {\\n      config[key] = options[key];\\n    }\\n  }\\n  \\n  return {\\n    success: true,\\n    data: { message: \'Example API response\' },\\n    config: config\\n  };\\n};\\n\\n// 使用示例\\nvar api = new ApiClient(\'https://api.example.com\');\\nvar response = api.request(\'/users\');',
  566.   '通用 API 客户端类 (ES5 版本)'
  567. );

  568. printl("添加代码片段2:", snippet2.name);
  569. print.log("snippet2:", snippet2.name);

  570. // 保存到本地存储
  571. snippetManager.saveToStorage();
  572. printl("代码片段已保存到存储");
  573. print.log("保存到localStorage模拟");

  574. // 搜索功能测试
  575. var searchResults = snippetManager.searchSnippets('react');
  576. printl("搜索'react'的结果:", searchResults.length, "个片段");
  577. print.log("搜索结果:", searchResults.length);

  578. // 导出代码片段
  579. var exportedSnippets = snippetManager.exportSnippets();
  580. printl("导出的代码片段JSON:", exportedSnippets);
  581. print.log("exportSnippets():", exportedSnippets);

  582. // ==================== 11. 性能对比演示 ====================
  583. printl("");
  584. print.log("=== 11. 性能对比演示 ===");

  585. // 创建测试数据
  586. var testData = {
  587.   largeArray: [],
  588.   summary: {
  589.     total: 1000,
  590.     active: 500,
  591.     inactive: 500
  592.   }
  593. };

  594. printl("创建测试数据对象");
  595. print.log("包含1000个项目的数组");

  596. for (var k = 0; k < 1000; k++) {
  597.   testData.largeArray.push({
  598.     id: k,
  599.     name: '项目 ' + k,
  600.     status: k % 2 === 0 ? 'active' : 'inactive',
  601.     metadata: {
  602.       created: new Date(),
  603.       tags: ['tag1', 'tag2', 'tag3'],
  604.       config: { enabled: true, priority: k }
  605.     }
  606.   });
  607. }

  608. printl("测试数据创建完成,共", testData.largeArray.length, "个项目");
  609. print.log("testData包含", testData.largeArray.length, "个项目");

  610. // 测试序列化性能
  611. var startTime = Date.now();
  612. var serializedLarge = JSON.stringify(testData);
  613. var serializeTime = Date.now() - startTime;

  614. printl("序列化耗时:", serializeTime, "毫秒");
  615. print.log("JSON.stringify耗时:", serializeTime, "ms");

  616. var startTime2 = Date.now();
  617. var deserializedLarge = JSON.parse(serializedLarge);
  618. var deserializeTime = Date.now() - startTime2;

  619. printl("反序列化耗时:", deserializeTime, "毫秒");
  620. print.log("JSON.parse耗时:", deserializeTime, "ms");

  621. printl("总耗时:", serializeTime + deserializeTime, "毫秒");
  622. print.log("完整JSON操作总耗时:", serializeTime + deserializeTime, "ms");

  623. // ==================== 12. JSON 工具函数 ====================
  624. printl("");
  625. print.log("=== 12. JSON 工具函数 ===");

  626. function JsonUtils() {}

  627. JsonUtils.isValidJSON = function(str) {
  628.   try {
  629.     JSON.parse(str);
  630.     return true;
  631.   } catch (e) {
  632.     return false;
  633.   }
  634. };

  635. JsonUtils.safeStringify = function(obj, fallback, replacer) {
  636.   fallback = fallback === undefined ? '{}' : fallback;
  637.   replacer = replacer === undefined ? null : replacer;
  638.   try {
  639.     return JSON.stringify(obj, replacer, 2);
  640.   } catch (err) {
  641.     printl("safeStringify错误:", err);
  642.     print.log("安全序列化失败:", err);
  643.     return fallback;
  644.   }
  645. };

  646. JsonUtils.safeParse = function(str, fallback, reviver) {
  647.   fallback = fallback === undefined ? null : fallback;
  648.   reviver = reviver === undefined ? null : reviver;
  649.   try {
  650.     return JSON.parse(str, reviver);
  651.   } catch (err) {
  652.     printl("safeParse错误:", err);
  653.     print.log("安全解析失败:", err);
  654.     return fallback;
  655.   }
  656. };

  657. JsonUtils.validateObjectStructure = function(obj, requiredFields) {
  658.   var missing = [];
  659.   var invalid = [];
  660.   
  661.   for (var m = 0; m < requiredFields.length; m++) {
  662.     var field = requiredFields[m];
  663.     if (!(field in obj)) {
  664.       missing.push(field);
  665.     } else if (obj[field] === null || obj[field] === undefined || obj[field] === '') {
  666.       invalid.push(field);
  667.     }
  668.   }
  669.   
  670.   return {
  671.     isValid: missing.length === 0 && invalid.length === 0,
  672.     missing: missing,
  673.     invalid: invalid
  674.   };
  675. };

  676. printl("JsonUtils工具类已定义");
  677. print.log("包含isValidJSON, safeStringify, safeParse, validateObjectStructure");

  678. // 测试 JSON 工具
  679. var testValidJSON = '{"name": "AIWROK", "version": "1.0.0"}';
  680. var testInvalidJSON = '{"name": "AIWROK", "version": }';

  681. printl("测试有效JSON:", testValidJSON);
  682. print.log("testValidJSON:", testValidJSON);

  683. var validResult = JsonUtils.isValidJSON(testValidJSON);
  684. printl("有效JSON验证结果:", validResult);
  685. print.log("JsonUtils.isValidJSON(testValidJSON):", validResult);

  686. printl("测试无效JSON:", testInvalidJSON);
  687. print.log("testInvalidJSON:", testInvalidJSON);

  688. var invalidResult = JsonUtils.isValidJSON(testInvalidJSON);
  689. printl("无效JSON验证结果:", invalidResult);
  690. print.log("JsonUtils.isValidJSON(testInvalidJSON):", invalidResult);

  691. var safeParsed = JsonUtils.safeParse(testInvalidJSON, { error: true });
  692. printl("安全解析结果:", safeParsed);
  693. print.log("JsonUtils.safeParse(testInvalidJSON):", safeParsed);

  694. var testObj = { name: 'AIWROK', version: '1.0.0' };
  695. var required = ['name', 'version', 'author'];
  696. var validation = JsonUtils.validateObjectStructure(testObj, required);

  697. printl("对象结构验证:", validation);
  698. print.log("JsonUtils.validateObjectStructure:", validation);

  699. printl("");
  700. print.log("=== JSON处理完整示例完成 ===");
  701. printl("&#128161; 这些技巧在实际项目开发中非常有用!");
  702. print.log("所有JSON操作示例已完成!");
复制代码



untoAIWROK软件展示JavaScript各种语句标识符的用法nextnocontent
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读了
    采集亚马逊正版群发工具有没有?
    Apr.20旅行X心语今天来说说YYPOST新功能的一个灵活用法,采集亚马逊商品信息,并且获得排名的软件,亚马逊现在越来越多客户做,淘宝的水是越来越清了,以前做电商的客户,现在都转战到外国,最赚钱的要数一些客户往亚马逊里堆了吧,拿我这个YYPOST的客户,最多的是采集,分析排名,刷价格,刷数量,改价,刷访问量等等技术

    企业发展B2B网站有什么东东软件可以发呢
    标题企业发展网B2B软件,现在虽然B2B网站收录不错,可愁的是心急的人们,他们太想一口吃撑胖子了,发帖宣传虽然不能像佛系那样淡定,但也不能像跑火车那般急躁对待,自己内容不收录,完全是自己操作内容问题,可以参考一下别人的内容是怎么弄的,然后自己要试着转变,而且收录这个内容,常常会变化的,不是一种规则就吃到老

    搜房天下房聊软件哪一个好呢
    本帖最后由 发帖软件 于 2019-5-22 16:15 编辑 2搜房天下群发房聊信息软件,开始本来打算做58同城的,但发一个就要一次点触验证码,这就让人没有感觉到存在的价值了吧,都是卖二手房和新房的搜房天下倒是可以发即时聊天信息,也没有发现他这个网站有啥子限制,登陆一个搜房天下账号,然后采集回来分类列表的网址,然后就一

    大家坛有没有好用的群发工具下载呢
    当你的笑容给我礼貌的招呼,大家坛全自动发帖软件,宣传推广是一场持久战,总是有一些人把软件用了一天,或是几个小时,就觉得自己付出太多了,那加进来的粉丝,或是流量,应该是和宣传多少成正比的,其实没有这么便宜的事,就像很多阅读量超过一百万的视频,或是电影,真正会在屏幕打赏的人不会超过三千,真正大额打赏给主

    群发正版软件中国塑料网
    中国塑料网群发软件YYPOST脚本下载地址,这个网站会有一个很奇怪的问题就是你在首页登陆无半个验证码,但在登陆网址登陆就会有一个验证码,所以我们灵活一些,在首页登陆就不用输入验证码了哈。网站秒收录比较高,但发的都是五金和建筑行业,先前有很多人都是发土建工程的大公司操作的,现在这个网站专为那个行业诞生的吧。

    OpenStreetMap网站正版2019年发帖工具下载
    本帖最后由 发帖软件 于 2019-5-21 11:13 编辑 OpenStreetMap网站全自动群发,OpenStreetMapOpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。有的人编辑地图然后等收录,有的人发日志等收录,我们这里也是利用地图日志做为宣传的目标,简单的脚本理

    搜房天下全自动收短信全自动识别验证码注册账号软件
    房天下自动注册机,这个脚本是前几天发房聊的脚本廷伸品种,这个脚本能做到自动注册账号,自动保存账号,自动发房聊的效果,不过今天我们主要说一说怎么注册账号写脚本吧,这个搜房天天下的账号,可以发提问,可以发房聊,发论坛,发博客,还有发个人中心页都是有秒收的效果的,这样就省去了去买号,去乱花钱的效果了吧,而

    企业邮箱安卓端有什么APP软件可以发的呢
    请输入标题企业邮箱安卓发发送邮箱脚本,这个脚本是利用企业邮箱进行群发的,全程是一种模拟手工操作的过程,所以封号是很少的,而且企业邮箱群发到普通QQ邮箱不容易进垃圾箱中的,所以这个脚本也是这样的原理,不过最好是利用一些多开器,登陆多点的QQ邮箱账号会比较流畅一些,然后用软件一个一个的切换APP进行群发邮件会

    头条留评论软件有没有好用的呢?
    今天整一个今日头条留言软件,对于留言YYPOST是优势是比较大的存在,因为他往往专注一些下拉定位的优点,像今日头条这样,还是需要一些特殊下拉定位的,因为他新闻有长有短,有图有视频的,所以综合起来定位是比较难的,如果用POST也不是很轻松可以破解他的加密参数。这个脚本也是有一个不好的地方就是换号会比较麻烦,您电

    单网页生成神器
    最近新技术,网页生成机占领了整个网络的半壁江山,效果很疯狂,虽然不知道能持续多久,作为开发软件的领头者,一直在找收录的方法,一直在努力创新着,一直被人模仿,却从没有被超越过,这个网页生成机,已经出来有一段时间了,一直没有拿出来分享,醉过醉过,它是利用的一些小小收录漏洞整的,您最好用一些老站域名,进行

关闭
快速回复 返回列表 返回顶部
本站自动发贴软件,是现在最流行的做脚本软件,这种发贴工具,不但发贴收录快,而且抢占好的先机,完全自由编辑,实现针对性群发模拟操作,软件可以顶贴,也可以发贴,可以兼容支持Discuz、PHPWind、Dvbbs三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖