 | |  |  | JSON.stringify 和 JSON.parse 完整示例
- // JSON.stringify 和 JSON.parse 完整示例 - AIWROK IDE 开发 (ES5 兼容)
- // 展示从基础到高级的所有 JSON 处理技巧
- // ES5系统安卓 JavaScript引擎Rhino
- //🍎交流QQ群711841924群一,苹果内测群,528816639
- logWindow.show()
- logWindow.setAlpha(300)
- logWindow.setHeight(2000)
- logWindow.setWidth(1800)
- // Rhino兼容的日期格式化函数
- function formatDateToString(date) {
- if (!(date instanceof Date)) {
- return date;
- }
-
- var year = date.getFullYear();
- var month = date.getMonth() + 1;
- var day = date.getDate();
- var hours = date.getHours();
- var minutes = date.getMinutes();
- var seconds = date.getSeconds();
- var milliseconds = date.getMilliseconds();
-
- // 补零函数
- function pad(num) {
- return num < 10 ? '0' + num : '' + num;
- }
-
- // 补零函数(3位毫秒)
- function pad3(num) {
- if (num < 10) return '00' + num;
- if (num < 100) return '0' + num;
- return '' + num;
- }
-
- return year + '-' + pad(month) + '-' + pad(day) + 'T' +
- pad(hours) + ':' + pad(minutes) + ':' + pad(seconds) +
- '.' + pad3(milliseconds) + 'Z';
- }
- // Rhino兼容的日期解析函数
- function parseDateFromString(dateString) {
- if (typeof dateString !== 'string') {
- return dateString;
- }
-
- // 检查是否是标准日期格式
- var dateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$/;
- if (!dateRegex.test(dateString)) {
- return dateString;
- }
-
- try {
- return new Date(dateString);
- } catch (err) {
- printl("日期解析错误:", err);
- print.log("无法解析日期字符串:", dateString);
- return dateString;
- }
- }
- // ==================== 1. 基础用法 ====================
- var user = {
- name: 'AIWROK Developer',
- age: 25,
- skills: ['JavaScript', 'React Native', 'Node.js'],
- active: true
- };
- printl("1. 基础用法");
- print.log("=== JSON 基础用法 ===");
- // 基本序列化
- var jsonStr = JSON.stringify(user);
- printl("序列化结果:", jsonStr);
- print.log("JSON.stringify(user):", jsonStr);
- // 基本反序列化
- var parsedUser = JSON.parse(jsonStr);
- printl("反序列化结果:", parsedUser);
- print.log("JSON.parse(jsonStr):", parsedUser);
- // ==================== 2. 美化输出 ====================
- printl("");
- print.log("=== 2. 美化输出 ===");
- var config = {
- app: 'AIWROK IDE',
- version: '2.1.0',
- settings: {
- theme: 'dark',
- autoSave: true,
- ai: {
- enabled: true,
- suggestions: true
- }
- }
- };
- printl("原始配置对象:", config);
- print.log("config对象:", config);
- // 美化输出
- var prettyConfig = JSON.stringify(config, null, 2);
- printl("美化输出结果:", prettyConfig);
- print.log("JSON.stringify(config, null, 2):", prettyConfig);
- // ==================== 3. 自定义序列化 (replacer) ====================
- printl("");
- print.log("=== 3. 自定义序列化 (replacer) ===");
- var dataWithDate = {
- name: 'AIWROK 配置',
- created: new Date('2023-06-01'),
- lastModified: new Date(),
- version: '1.0.0',
- features: ['darkMode', 'autoSave', 'aiSuggestions']
- };
- printl("包含Date对象的数据:", dataWithDate);
- print.log("原始dataWithDate:", dataWithDate);
- // 自定义 replacer 函数,将 Date 转换为字符串
- var serializedData = JSON.stringify(dataWithDate, function(key, value) {
- if (value instanceof Date) {
- return formatDateToString(value);
- }
- return value;
- }, 2);
- printl("序列化后 (Date转字符串):", serializedData);
- print.log("使用replacer后的JSON:", serializedData);
- // ==================== 4. 自定义反序列化 (reviver) ====================
- printl("");
- print.log("=== 4. 自定义反序列化 (reviver) ===");
- // 自定义反序列化函数
- function customReviver(key, value) {
- // 检查是否是日期字符串格式
- return parseDateFromString(value);
- }
- printl("自定义reviver函数已定义");
- print.log("customReviver函数: 自动转换日期字符串为Date对象");
- var deserializedData = JSON.parse(serializedData, customReviver);
- printl("反序列化结果:", deserializedData);
- print.log("JSON.parse(serializedData, customReviver):", deserializedData);
- // ==================== 5. 属性过滤 ====================
- printl("");
- print.log("=== 5. 属性过滤 ===");
- // 过滤敏感信息的函数
- var sensitiveData = {
- id: 12345,
- username: 'aiwrok_dev',
- email: 'dev@aiwrok.com',
- password: 'secret123',
- accessToken: 'abc123xyz',
- profile: {
- realName: 'AIWROK Developer',
- phone: '13800138000',
- address: '北京市朝阳区'
- }
- };
- printl("原始敏感数据:", sensitiveData);
- print.log("包含密码等敏感信息的数据:", sensitiveData);
- var filteredJson = JSON.stringify(sensitiveData, function(key, value) {
- if (key === 'password' || key === 'accessToken' || key === 'phone' || key === 'address') {
- return undefined;
- }
- return value;
- }, 2);
- printl("过滤后的JSON:", filteredJson);
- print.log("移除敏感信息后的结果:", filteredJson);
- // ==================== 6. 数组处理 ====================
- printl("");
- print.log("=== 6. 数组处理 ===");
- var projects = [
- {
- name: 'AIWROK IDE',
- type: 'ide',
- technologies: ['React', 'Electron', 'Node.js'],
- status: 'active',
- startDate: new Date('2023-06-01')
- },
- {
- name: 'AIWROK Web IDE',
- type: 'web',
- technologies: ['React', 'Node.js', 'Monaco Editor'],
- status: 'planning',
- startDate: new Date('2024-01-15')
- },
- {
- name: 'AIWROK API',
- type: 'api',
- technologies: ['Express', 'MongoDB', 'JWT'],
- status: 'active',
- startDate: new Date('2023-09-01')
- }
- ];
- printl("项目数组:", projects);
- print.log("包含Date对象的数组:", projects);
- // 序列化数组
- var projectsJson = JSON.stringify(projects, function(key, value) {
- if (key === 'startDate') {
- return formatDateToString(value);
- }
- return value;
- }, 2);
- printl("序列化后的项目数组:", projectsJson);
- print.log("Date对象转换为字符串:", projectsJson);
- // 反序列化数组
- var parsedProjects = JSON.parse(projectsJson, function(key, value) {
- if (key === 'startDate') {
- return parseDateFromString(value);
- }
- return value;
- });
- printl("反序列化后的项目数组:", parsedProjects);
- print.log("字符串转换回Date对象:", parsedProjects);
- // ==================== 7. 错误处理 ====================
- printl("");
- print.log("=== 7. 错误处理 ===");
- // 安全解析函数
- function safeParse(jsonString, fallback) {
- fallback = fallback === undefined ? null : fallback;
- try {
- return JSON.parse(jsonString);
- } catch (err) {
- printl("JSON解析错误:", err);
- print.log("解析失败,返回默认值:", fallback);
- return fallback;
- }
- }
- // 安全序列化函数 - 处理循环引用
- function safeStringify(obj, space) {
- space = space === undefined ? 0 : space;
- var visited = [];
-
- function replacer(key, value) {
- if (typeof value === 'object' && value !== null) {
- // 检查循环引用
- if (visited.indexOf(value) !== -1) {
- return '[Circular Reference]';
- }
- visited.push(value);
- }
- return value;
- }
-
- try {
- return JSON.stringify(obj, replacer, space);
- } catch (err) {
- printl("JSON序列化错误:", err);
- print.log("序列化失败,返回空对象");
- return '{}';
- }
- }
- printl("安全解析和序列化函数已定义");
- print.log("包含错误处理的工具函数");
- // 测试有效和无效的 JSON
- var validJson = '{"message": "Hello, AIWROK!", "status": "success"}';
- var invalidJson = '{"message": "Hello, AIWROK!", "status": }';
- printl("测试有效JSON:", validJson);
- print.log("validJson:", validJson);
- var validResult = safeParse(validJson);
- printl("有效JSON解析结果:", validResult);
- print.log("safeParse(validJson):", validResult);
- printl("测试无效JSON:", invalidJson);
- print.log("invalidJson:", invalidJson);
- var invalidResult = safeParse(invalidJson);
- printl("无效JSON解析结果:", invalidResult);
- print.log("safeParse(invalidJson):", invalidResult);
- // 测试循环引用
- var circularObj = { name: 'AIWROK' };
- circularObj.self = circularObj;
- printl("测试循环引用对象:", safeStringify(circularObj, 2));
- print.log("circularObj包含自引用");
- var circularResult = safeStringify(circularObj);
- printl("循环引用序列化结果:", circularResult);
- print.log("safeStringify(circularObj):", circularResult);
- // ==================== 8. 实际应用示例 - 用户会话管理 ====================
- printl("");
- print.log("=== 8. 用户会话管理 ===");
- // 用户会话类
- function UserSession(userData) {
- this.user = userData;
- this.loginTime = new Date();
- this.lastActivity = new Date();
- this.sessionId = this.generateSessionId();
- }
- UserSession.prototype.generateSessionId = function() {
- return 'sess_' + Math.random().toString(36).substr(2, 9);
- };
- UserSession.prototype.updateActivity = function() {
- this.lastActivity = new Date();
- };
- UserSession.prototype.getSessionInfo = function() {
- return {
- sessionId: this.sessionId,
- user: this.user,
- loginTime: formatDateToString(this.loginTime),
- lastActivity: formatDateToString(this.lastActivity),
- isActive: this.isSessionActive()
- };
- };
- UserSession.prototype.isSessionActive = function() {
- var now = new Date();
- var timeDiff = now - this.lastActivity;
- return timeDiff < 30 * 60 * 1000; // 30分钟无活动视为过期
- };
- UserSession.prototype.serialize = function() {
- var self = this;
- return JSON.stringify(this, function(key, value) {
- if (key === 'loginTime' || key === 'lastActivity') {
- return formatDateToString(value);
- }
- // 避免序列化原型链上的方法
- if (typeof value === 'function') {
- return undefined;
- }
- return value;
- });
- };
- UserSession.prototype.deserialize = function(jsonString) {
- try {
- var data = JSON.parse(jsonString);
- this.user = data.user;
- this.loginTime = parseDateFromString(data.loginTime);
- this.lastActivity = parseDateFromString(data.lastActivity);
- this.sessionId = data.sessionId;
- return true;
- } catch (err) {
- printl("会话反序列化错误:", err);
- print.log("恢复会话失败:", err);
- return false;
- }
- };
- printl("UserSession类已定义");
- print.log("包含序列化、反序列化等方法");
- // 创建用户会话
- var userData = {
- id: 1001,
- username: 'aiwrok_dev',
- permissions: ['read', 'write', 'admin']
- };
- var session = new UserSession(userData);
- printl("创建用户会话:", session.getSessionInfo());
- print.log("session对象:", session.getSessionInfo());
- // 保存会话到本地存储
- var sessionJson = session.serialize();
- printl("序列化后的会话数据:", sessionJson);
- print.log("session.serialize():", sessionJson);
- var mockStorage = {
- data: {},
- setItem: function(key, value) {
- this.data[key] = value;
- },
- getItem: function(key) {
- return this.data[key];
- }
- };
- mockStorage.setItem('aiwrok_user_session', sessionJson);
- printl("会话数据已保存到存储");
- print.log("保存到localStorage模拟");
- // 从本地存储恢复会话
- var restoredSession = new UserSession({});
- var sessionData = mockStorage.getItem('aiwrok_user_session');
- if (restoredSession.deserialize(sessionData)) {
- printl("会话恢复成功:", restoredSession.getSessionInfo());
- print.log("会话恢复成功:", restoredSession.getSessionInfo());
- } else {
- printl("会话恢复失败");
- print.log("恢复失败,可能是数据损坏");
- }
- // ==================== 9. 项目配置管理 ====================
- printl("");
- print.log("=== 9. 项目配置管理 ===");
- // 项目配置类
- function ProjectConfig() {
- this.configs = {};
- }
- ProjectConfig.prototype.save = function(name, config) {
- this.configs[name] = config;
- };
- ProjectConfig.prototype.get = function(name) {
- return this.configs[name] || null;
- };
- ProjectConfig.prototype.getAll = function() {
- return this.configs;
- };
- printl("ProjectConfig类已定义");
- print.log("配置管理类: save, get, getAll方法");
- var projectConfig = {
- name: 'AIWROK IDE Project',
- version: '2.1.0',
- created: new Date('2023-06-01'),
- lastModified: new Date(),
- features: {
- darkMode: true,
- autoSave: true,
- intelliSense: true,
- codeFormatting: true
- },
- dependencies: {
- core: ['react', 'react-native'],
- dev: ['jest', 'eslint', 'prettier'],
- ui: ['react-native-vector-icons', 'react-native-gesture-handler']
- }
- };
- printl("项目配置对象:", projectConfig);
- print.log("包含Date对象和嵌套对象");
- // 保存项目配置到本地存储
- function saveProjectConfig(config) {
- var serialized = JSON.stringify(config, function(key, value) {
- if (value instanceof Date) {
- return formatDateToString(value);
- }
- return value;
- }, 2);
-
- // 模拟 localStorage 保存
- mockStorage.setItem('aiwrok_project_config', serialized);
- return serialized;
- }
- // 加载项目配置
- function loadProjectConfig() {
- var stored = mockStorage.getItem('aiwrok_project_config');
- if (!stored) return null;
-
- try {
- return JSON.parse(stored, function(key, value) {
- // 自动转换日期字符串为 Date 对象
- if (key === 'created' || key === 'lastModified') {
- return parseDateFromString(value);
- }
- return value;
- });
- } catch (err) {
- printl("加载配置错误:", err);
- print.log("配置解析失败:", err);
- return null;
- }
- }
- printl("配置保存和加载函数已定义");
- print.log("自动处理Date对象转换");
- var savedConfig = saveProjectConfig(projectConfig);
- printl("保存配置结果:", savedConfig);
- print.log("saveProjectConfig返回:", savedConfig);
- var loadedConfig = loadProjectConfig();
- printl("加载配置结果:", loadedConfig);
- print.log("loadProjectConfig返回:", loadedConfig);
- if (loadedConfig && loadedConfig.created instanceof Date) {
- printl("Date对象恢复成功");
- print.log("loadedConfig.created是Date对象:", loadedConfig.created);
- } else {
- printl("Date对象恢复失败");
- print.log("loadedConfig.created不是Date对象");
- }
- // ==================== 10. 代码片段管理 ====================
- printl("");
- print.log("=== 10. 代码片段管理 ===");
- // 代码片段存储
- function CodeSnippetManager() {
- this.snippets = [];
- }
- CodeSnippetManager.prototype.addSnippet = function(name, language, code, description) {
- description = description === undefined ? '' : description;
- var snippet = {
- id: Date.now(),
- name: name,
- language: language,
- code: code,
- description: description,
- createdAt: new Date(),
- tags: this.extractTags(code)
- };
-
- this.snippets.push(snippet);
- return snippet;
- };
- CodeSnippetManager.prototype.extractTags = function(code) {
- var commonPatterns = {
- 'React': /import.*from\s+['"]react['"]/,
- 'React Native': /from\s+['"]react-native['"]/,
- 'API': /fetch\(|axios\./,
- 'Async': /async\s+|await\s+/,
- 'ES6': /const\s+|let\s+|=>/
- };
-
- var tags = [];
- for (var keyword in commonPatterns) {
- if (commonPatterns.hasOwnProperty(keyword) && commonPatterns[keyword].test(code)) {
- tags.push(keyword.toLowerCase());
- }
- }
- return tags;
- };
- CodeSnippetManager.prototype.searchSnippets = function(keyword) {
- return this.snippets.filter(function(snippet) {
- return snippet.name.toLowerCase().indexOf(keyword.toLowerCase()) !== -1 ||
- snippet.code.toLowerCase().indexOf(keyword.toLowerCase()) !== -1 ||
- snippet.description.toLowerCase().indexOf(keyword.toLowerCase()) !== -1 ||
- snippet.tags.some(function(tag) { return tag.indexOf(keyword.toLowerCase()) !== -1; });
- });
- };
- CodeSnippetManager.prototype.exportSnippets = function() {
- return JSON.stringify(this.snippets, function(key, value) {
- if (key === 'createdAt') {
- return formatDateToString(value);
- }
- return value;
- }, 2);
- };
- CodeSnippetManager.prototype.importSnippets = function(jsonString) {
- try {
- var snippets = JSON.parse(jsonString, function(key, value) {
- if (key === 'createdAt') {
- return parseDateFromString(value);
- }
- return value;
- });
-
- this.snippets = snippets;
- return true;
- } catch (err) {
- printl("导入代码片段错误:", err);
- print.log("导入失败:", err);
- return false;
- }
- };
- CodeSnippetManager.prototype.saveToStorage = function() {
- var data = {
- snippets: this.snippets,
- exportedAt: new Date()
- };
- var serialized = JSON.stringify(data, function(key, value) {
- if (value instanceof Date) {
- return formatDateToString(value);
- }
- return value;
- }, 2);
- mockStorage.setItem('aiwrok_code_snippets', serialized);
- };
- CodeSnippetManager.prototype.loadFromStorage = function() {
- var stored = mockStorage.getItem('aiwrok_code_snippets');
- if (!stored) return false;
-
- try {
- var data = JSON.parse(stored, function(key, value) {
- if (key === 'exportedAt' || key === 'createdAt') {
- return parseDateFromString(value);
- }
- return value;
- });
-
- this.snippets = data.snippets;
- return true;
- } catch (err) {
- printl("加载代码片段错误:", err);
- print.log("加载失败:", err);
- return false;
- }
- };
- printl("CodeSnippetManager类已定义");
- print.log("包含添加、搜索、导入导出等功能");
- // 创建代码片段管理器
- var snippetManager = new CodeSnippetManager();
- printl("创建代码片段管理器");
- print.log("snippetManager实例已创建");
- // 添加示例代码片段
- var snippet1 = snippetManager.addSnippet(
- 'React Hook',
- 'javascript',
- '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;',
- 'React 组件模板 (ES5 版本)'
- );
- printl("添加代码片段1:", snippet1.name);
- print.log("snippet1:", snippet1.name);
- var snippet2 = snippetManager.addSnippet(
- 'API 客户端',
- 'javascript',
- '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\');',
- '通用 API 客户端类 (ES5 版本)'
- );
- printl("添加代码片段2:", snippet2.name);
- print.log("snippet2:", snippet2.name);
- // 保存到本地存储
- snippetManager.saveToStorage();
- printl("代码片段已保存到存储");
- print.log("保存到localStorage模拟");
- // 搜索功能测试
- var searchResults = snippetManager.searchSnippets('react');
- printl("搜索'react'的结果:", searchResults.length, "个片段");
- print.log("搜索结果:", searchResults.length);
- // 导出代码片段
- var exportedSnippets = snippetManager.exportSnippets();
- printl("导出的代码片段JSON:", exportedSnippets);
- print.log("exportSnippets():", exportedSnippets);
- // ==================== 11. 性能对比演示 ====================
- printl("");
- print.log("=== 11. 性能对比演示 ===");
- // 创建测试数据
- var testData = {
- largeArray: [],
- summary: {
- total: 1000,
- active: 500,
- inactive: 500
- }
- };
- printl("创建测试数据对象");
- print.log("包含1000个项目的数组");
- for (var k = 0; k < 1000; k++) {
- testData.largeArray.push({
- id: k,
- name: '项目 ' + k,
- status: k % 2 === 0 ? 'active' : 'inactive',
- metadata: {
- created: new Date(),
- tags: ['tag1', 'tag2', 'tag3'],
- config: { enabled: true, priority: k }
- }
- });
- }
- printl("测试数据创建完成,共", testData.largeArray.length, "个项目");
- print.log("testData包含", testData.largeArray.length, "个项目");
- // 测试序列化性能
- var startTime = Date.now();
- var serializedLarge = JSON.stringify(testData);
- var serializeTime = Date.now() - startTime;
- printl("序列化耗时:", serializeTime, "毫秒");
- print.log("JSON.stringify耗时:", serializeTime, "ms");
- var startTime2 = Date.now();
- var deserializedLarge = JSON.parse(serializedLarge);
- var deserializeTime = Date.now() - startTime2;
- printl("反序列化耗时:", deserializeTime, "毫秒");
- print.log("JSON.parse耗时:", deserializeTime, "ms");
- printl("总耗时:", serializeTime + deserializeTime, "毫秒");
- print.log("完整JSON操作总耗时:", serializeTime + deserializeTime, "ms");
- // ==================== 12. JSON 工具函数 ====================
- printl("");
- print.log("=== 12. JSON 工具函数 ===");
- function JsonUtils() {}
- JsonUtils.isValidJSON = function(str) {
- try {
- JSON.parse(str);
- return true;
- } catch (e) {
- return false;
- }
- };
- JsonUtils.safeStringify = function(obj, fallback, replacer) {
- fallback = fallback === undefined ? '{}' : fallback;
- replacer = replacer === undefined ? null : replacer;
- try {
- return JSON.stringify(obj, replacer, 2);
- } catch (err) {
- printl("safeStringify错误:", err);
- print.log("安全序列化失败:", err);
- return fallback;
- }
- };
- JsonUtils.safeParse = function(str, fallback, reviver) {
- fallback = fallback === undefined ? null : fallback;
- reviver = reviver === undefined ? null : reviver;
- try {
- return JSON.parse(str, reviver);
- } catch (err) {
- printl("safeParse错误:", err);
- print.log("安全解析失败:", err);
- return fallback;
- }
- };
- JsonUtils.validateObjectStructure = function(obj, requiredFields) {
- var missing = [];
- var invalid = [];
-
- for (var m = 0; m < requiredFields.length; m++) {
- var field = requiredFields[m];
- if (!(field in obj)) {
- missing.push(field);
- } else if (obj[field] === null || obj[field] === undefined || obj[field] === '') {
- invalid.push(field);
- }
- }
-
- return {
- isValid: missing.length === 0 && invalid.length === 0,
- missing: missing,
- invalid: invalid
- };
- };
- printl("JsonUtils工具类已定义");
- print.log("包含isValidJSON, safeStringify, safeParse, validateObjectStructure");
- // 测试 JSON 工具
- var testValidJSON = '{"name": "AIWROK", "version": "1.0.0"}';
- var testInvalidJSON = '{"name": "AIWROK", "version": }';
- printl("测试有效JSON:", testValidJSON);
- print.log("testValidJSON:", testValidJSON);
- var validResult = JsonUtils.isValidJSON(testValidJSON);
- printl("有效JSON验证结果:", validResult);
- print.log("JsonUtils.isValidJSON(testValidJSON):", validResult);
- printl("测试无效JSON:", testInvalidJSON);
- print.log("testInvalidJSON:", testInvalidJSON);
- var invalidResult = JsonUtils.isValidJSON(testInvalidJSON);
- printl("无效JSON验证结果:", invalidResult);
- print.log("JsonUtils.isValidJSON(testInvalidJSON):", invalidResult);
- var safeParsed = JsonUtils.safeParse(testInvalidJSON, { error: true });
- printl("安全解析结果:", safeParsed);
- print.log("JsonUtils.safeParse(testInvalidJSON):", safeParsed);
- var testObj = { name: 'AIWROK', version: '1.0.0' };
- var required = ['name', 'version', 'author'];
- var validation = JsonUtils.validateObjectStructure(testObj, required);
- printl("对象结构验证:", validation);
- print.log("JsonUtils.validateObjectStructure:", validation);
- printl("");
- print.log("=== JSON处理完整示例完成 ===");
- printl("💡 这些技巧在实际项目开发中非常有用!");
- print.log("所有JSON操作示例已完成!");
复制代码
| |  | |  |
|