cocos-html5 Json 灵活 遍历方式 不同方式的缺陷,优点总结
1,四种解析Json的方式:
Part 1
1 2 3 4 5 | var list1 = [1,3,4]; alert(list1[1]); var list2 = [{ "name" : "leamiko" , "xing" : "lin" }]; alert(list2[0][ "xing" ]) alert(list2[0].xing) |
解释:括号 和 点号 都能获取属性值。 js 处理 JSON 的灵活性
Part 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | var value = { "china" :{ "hangzhou" :{ "item" : "1" }, "shanghai" :{ "item" : "2" }, "chengdu" :{ "item" : "3" } }, "America" :{ "aa" :{ "item" : "1" }, "bb" :{ "item" : "2" } }, "Spain" :{ "dd" :{ "item" : "1" }, "ee" :{ "item" : "2" }, "ff" :{ "item" : "3" } } }; for ( var countryObj in value) { document.write(countryObj + ":<br />" ) //没用的for(var cityObj in value.countryObj) for ( var cityObj in value[countryObj]) { document.write( ' ' + cityObj + "<br />" ); for ( var itemObj in value[countryObj][cityObj]) { document.write( " " + itemObj + value[countryObj][cityObj][itemObj] + "<br />" ) } } } |
解释:
countryObj 为value对象的一个属性名,value[countryObj] 为value对象的属性值 这里为一个json对象比如b,value[countryObj][cityObj]为josn对象b的属性值 它也是一个json对象,于是 value[countryObj][cityObj]["item"]便可以取到json对象暂时成为c的值,或者 value[countryObj][cityObj].item。
总之分清是json还是array这是很关键的。
Part 3
var value2 = { "china":[ {"name":"hangzhou", "item":"1"}, {"name":"shanghai", "item":"2"}, {"name":"sichuan", "item":"3"} ], "America":[ {"name":"aa", "item":"12"}, {"name":"bb", "item":"2"} ], "Spain":[ {"name":"cc", "item":"1"}, {"name":"dd", "item":"23"}, {"name":"ee", "item":"3"} ] }; for (var countryObj in value2) { document.write(countryObj + ":<br />") for (var cityObj in value2[countryObj]) { //可以用document.write(" " + value2[countryObj][cityObj].item + "<br />"); document.write(cityObj + " " + value2[countryObj][cityObj]["name"] + "<br />" ); } }
解释:
countryObj 为value2对象的属性名,value2[countryObj] 为value2对象属性值 在本例中它是一个数组,cityObj 是数组的一个元素,它又是另外一个json对象,于是,value2[countryObj][cityObj]["name"]就访问到该对象的 name的属性值,也可以通过 value2[countryObj][cityObj].name 来访问该属性值。
Part 4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | var value2 = { "china" :[ { "name" : "hangzhou" , "item" : "1" }, { "name" : "shanghai" , "item" : "2" }, { "name" : "sichuan" , "item" : "3" } ], "America" :[ { "name" : "aa" , "item" : "12" }, { "name" : "bb" , "item" : "2" } ], "Spain" :[ { "name" : "cc" , "item" : "1" }, { "name" : "dd" , "item" : "23" }, { "name" : "ee" , "item" : "3" } ] }; for ( var countryObj in value2) { document.write(countryObj + ":<br />" ) //document.write(" " + value2[countryObj].length); for ( var i = 0;i < value2[countryObj].length; i++) { document.write( " " + value2[countryObj][i][ "name" ] + "<br />" ); } } |
解释:
countryObj value2对象的属性名,value2[countryObj] 属性值 本例中是一个数组,value2[countryObj].length 数组的长度,value2[countryObj][i]数组的项 == json对象。
value2[countryObj][i]["name"] 取得name的值,也可以用value2[countryObj][i].name 来取得name的值。
总结: ["name"] 方式 获取JSON 是标准方式, .name 方式 不是标准方式(但是符合人类思考方式,常用),但是有缺陷,如果name 是数字,获取方式就失败了,标准方式没问题.....
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南