json数组内部格式不统一,在JS中如何解析?

a7893691245 2012-05-21 09:12:52
var mainMenu = [
{
id:0, pic:["menu0_1.png","menu1_1.png"], name:["电视广播",""], url:"",
subMenu:[
{name:["电视节目",""], url:"ui://play.html"},
{name:["节目预告",""], url:"ui://epg.htm"},
{name:["录制回放",""], url:"ui://pvr.htm"},
{name:["视频点播",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=VOD"},
{name:["节目回看",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=RevTV"},
{name:["画中画",""], url:"ui://play.html?pip"}
]
},

{
id:1, pic:["menu0_2.png","menu1_2.png"], name:["家庭娱乐",""], url:"" ,
subMenu:[
{name:["互动游戏",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=TVGame"},
{name:["收音机",""], url:"ui://audio_epg.htm"},
{name:["卡拉OK",""], url:"ui://meta_to_ocn.htm?http://10.27.65.25/index.asp?SrvType=KaraOKe"},
{name:["相册",""], url:"photo_list.htm"},
{name:["音乐",""], url:"mp3_list.htm"},
{name:["视频",""], url:"video_list.htm"}
]
},

{
id:2, pic:["menu0_3.png","menu1_3.png"], name:["金融",""], url:"" ,
subMenu:[
{name:["证券资讯",""], url:"ui://stockinfo.htm"},
{name:["证券交易",""], url:"ui://meta_to_ocn.htm?http://10.27.65.25/index.asp?SrvType=Stock"},
{name:["电视银行",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=TVBank"},
{name:["彩票天地",""], url:"ui://meta_to_ocn.htm?http://10.27.65.25/index.asp?SrvType=Lottery"}
]
},

{
id:3, pic:["menu0_4.png","menu1_4.png"], name:["信息",""], url:"" ,
subMenu:[
{name:["阳光政务",""], url:"dvb://2.20.c86.ff/index.html"},
{name:["信息世界",""], url:"ui://info_world.htm"},
{name:["电视报纸",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=TVNews"}
]
},

{
id:4, pic:["menu0_5.png","menu1_5.png"], name:["便民",""], url:"" ,
subMenu:[
{name:["东方俱乐部",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=Club.Orient"},
{name:["数字电视卡",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=Club.Card"},
{name:["特惠商户",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=Club.Shop"},
{name:["便民付费",""], url:"ui://meta_to_1000.htm?http://10.27.65.25/index.asp?SrvType=Payment"}
]
},

{
id:7, pic:["menu0_6.png","menu1_6.png"], name:["教育",""], url:"" ,
subMenu:[
{name:["优化学习",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=Schedule"},
{name:["电视学堂",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=TvSchool"},
{name:["党员教育",""], url:"ui://meta_to_ocn.htm?http://10.27.65.25/index.asp?SrvType=PartyEdu"}
]
},

{
id:8, pic:["menu0_7.png","menu1_7.png"], name:["通信",""], url:"" ,
subMenu:[
{name:["短信传情",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=SMS"},
{name:["邮件通知",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=MAIL"}
]
},

{
id:5, pic:["menu0_8.png","menu1_8.png"], name:["系统设置",""], url:"",
subMenu:[
{name:["我的收藏",""], url:"ui://setting.htm?0"},
{name:["节目管理",""], url:"ui://setting.htm?1"},
{name:["录制管理",""], url:"ui://setting.htm?2"},
{name:["用户设置",""], url:"ui://setting.htm?3"},
{name:["系统设置",""], url:"ui://setting.htm?4"}
]
},

{
id:6, pic:["menu0_0.png","menu1_0.png"], name:["推荐",""], url:"" ,
subMenu:[
{name:[{name:"便民付费1"},{name:"便民付费1"}], url:"ui://meta_to_1000.htm?http://10.27.65.25/index.asp?SrvType=Payment"},
{name:["优化学习2",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=Schedule"},
{name:["视频点播3",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=VOD"},
{name:["便民付费4",""], url:"ui://meta_to_1000.htm?http://10.27.65.25/index.asp?SrvType=Payment"},
{name:["优化学习5",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=Schedule"},
{name:["视频点播6",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=VOD"},
{name:["便民付费7",""], url:"ui://meta_to_1000.htm?http://10.27.65.25/index.asp?SrvType=Payment"},
{name:["优化学习8",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=Schedule"},
{name:["视频点播9",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=VOD"},
{name:["便民付费10",""], url:"ui://meta_to_1000.htm?http://10.27.65.25/index.asp?SrvType=Payment"},
{name:["优化学习11",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=Schedule"},
{name:["视频点播12",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=VOD"},
{name:["便民付费13",""], url:"ui://meta_to_1000.htm?http://10.27.65.25/index.asp?SrvType=Payment"},
{name:["优化学习14",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=Schedule"},
{name:["优化学习15",""], url:"ui://meta_to_vod.htm?http://10.27.65.25/index.asp?SrvType=Schedule"}
]
}
];
...全文
409 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
a7893691245 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 12 楼 的回复:

内部进行处理?
如果有15种变化,内部加15种方式处理?
如果有1W种呢,再加1W中解析方式?


没看4楼代码?有1万种也没问题。
[/Quote]


兄弟,老总不允许在外面处理完再放进去的。。。
乌镇程序员 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

内部进行处理?
如果有15种变化,内部加15种方式处理?
如果有1W种呢,再加1W中解析方式?
[/Quote]

没看4楼代码?有1万种也没问题。
a7893691245 2012-05-21
  • 打赏
  • 举报
回复
内部进行处理?
如果有15种变化,内部加15种方式处理?
如果有1W种呢,再加1W中解析方式?
a7893691245 2012-05-21
  • 打赏
  • 举报
回复
内部进行处理?
如果有15种变化,内部加15种方式处理?
如果有1W种呢,再加1W中解析方式?
乌镇程序员 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 8 楼 的回复:

JScript code
var obj=mainMenu[8]['subMenu'];
var arr=new Array();
for(var i in obj){
if(typeof (obj[i].name[0])=='object')
arr.push(obj[i].name[0].name);
……
[/Quote]

为什么一定要在外部进行处理呢,在你写的方法内部进行处理也不行?
a7893691245 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

JScript code
var obj=mainMenu[8]['subMenu'];
var arr=new Array();
for(var i in obj){
if(typeof (obj[i].name[0])=='object')
arr.push(obj[i].name[0].name);
else
……
[/Quote]


不能再外部处理掉再弄进去的。。。
一起混吧 2012-05-21
  • 打赏
  • 举报
回复
var obj=mainMenu[8]['subMenu'];
var arr=new Array();
for(var i in obj){
if(typeof (obj[i].name[0])=='object')
arr.push(obj[i].name[0].name);
else
arr.push(obj[i].name[0]);
}
alert(arr);
a7893691245 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]


循环的时候写个
if(mainMenu[8].subMenu[0].name[0].name){
// 表示 格式是这种的 name:[{name:"便民付费1"},{name:"便民付费1"}]
}else{
//name:["我的收藏",""]
}
[/Quote]


那如果后面第二列格式又不同,不又要一个判断?如果都不同的话,不要写15个判断?
逻辑太负杂了。
a7893691245 2012-05-21
  • 打赏
  • 举报
回复
首先,楼上两位的意思都懂了,
但是,老总对我的要求不是这样的。
这种方法我试了,不能在外面处理成格式统一的。
老总的意思是写一个封装方法,只需要在外部把需要读的数组传递进来就能读取,
无论是什么形式的数组,包括内部格式不同,多维,交错等等。
乌镇程序员 2012-05-21
  • 打赏
  • 举报
回复
那就把格式处理成统一的:
for (var i = 0; i < mainMenu.length; i ++) {
for (var j = 0; j < mainMenu[i].subMenu.length; j ++) {
if (typeof(mainMenu[i].subMenu[j].name[0]) != 'string') {
var ar = [];
for (var k = 0; k < mainMenu[i].subMenu[j].name.length; k ++) ar.push(mainMenu[i].subMenu[j].name[k].name);
mainMenu[i].subMenu[j].name = ar;
}
}
}
001007009 2012-05-21
  • 打赏
  • 举报
回复

循环的时候写个
if(mainMenu[8].subMenu[0].name[0].name){
// 表示 格式是这种的 name:[{name:"便民付费1"},{name:"便民付费1"}]
}else{
//name:["我的收藏",""]
}
a7893691245 2012-05-21
  • 打赏
  • 举报
回复
只需要解析mainMenu[8].subMenu[i].name[0]那一列,


回2楼
不是我不要统一,是我们老总非要这么弄,
我开始在JS中把JSON数组和多维数组解析都是共用一个方法的,
结果他说不行,就把数组改成这样了。
001007009 2012-05-21
  • 打赏
  • 举报
回复
最好统一格式啊,
要不然前端逻辑就要写得复杂些

87,923

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧