Javascript 将json对象拆分为一个数组,并为每个数组分配其他对象
使用第一个JSON文件Javascript 将json对象拆分为一个数组,并为每个数组分配其他对象,javascript,jquery,json,split,Javascript,Jquery,Json,Split,使用第一个JSON文件 [ { "bigcat": "Sport", "cat": "mainstream", "choice": "football" }, { "bigcat": "Sport", "cat": "mainstream", "choice": "basketball" }, { "bigcat": "Sport", "cat": "niche", "choice": "MMA" }
[
{
"bigcat": "Sport",
"cat": "mainstream",
"choice": "football"
},
{
"bigcat": "Sport",
"cat": "mainstream",
"choice": "basketball"
},
{
"bigcat": "Sport",
"cat": "niche",
"choice": "MMA"
},
{
"bigcat": "Sport",
"cat": "niche",
"choice": "wrestling"
}
]
[
{
"bigcat": "Sport",
"cat": "mainstream",
"choice": "football|basketball"
},
{
"bigcat": "Sport",
"cat": "niche",
"choice": "wrestling|racing"
}
]
使用第二个JSON文件
我在使用split
和$时遇到问题。每个函数都返回数组中的每个小选项
我使用的是一个通过AJAX链接的选择框。它需要这样的标记来构建链接的选择框:
<select>
<option value="mustang2000">Ford » Mustang » 2000</option>
<option value="mustang2005">Ford » Mustang » 2005</option>
<option value="focus">Ford » Focus » 2010</option>
<option value="alero">Oldsmobile » Alero » 1993</option>
</select>
我想用“|”作为分隔符将同一类别的所有选项塞入一个大选项中,如下所示:
第二个JSON文件
[
{
"bigcat": "Sport",
"cat": "mainstream",
"choice": "football"
},
{
"bigcat": "Sport",
"cat": "mainstream",
"choice": "basketball"
},
{
"bigcat": "Sport",
"cat": "niche",
"choice": "MMA"
},
{
"bigcat": "Sport",
"cat": "niche",
"choice": "wrestling"
}
]
[
{
"bigcat": "Sport",
"cat": "mainstream",
"choice": "football|basketball"
},
{
"bigcat": "Sport",
"cat": "niche",
"choice": "wrestling|racing"
}
]
在脚本中使用split
和$。每个
函数返回每个小选项
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%20%3D%22http%3A%2F%2Fgoo.gl%2FqMlPxn%22&format=json&diagnostics=true&callback=",
success: function(data){
var $select = $('select');var $option="";
$.each(data.query.results.json.json, function (index, i) {
smallchoice = i.choice.split(',');
$.each(smallchoice,function(i,smallchoice){
$option = $("<option/>").attr("value", smallchoice).text(i.bigcat + "@" +( i.cat || "") +"@" + smallchoice);
});
$select.append($option);
});
$select.dynamicDropdown({"delimiter":"@"});
}
});
$.ajax({
url:“http://query.yahooapis.com/v1/public/yql?q=select%20*%20来自%20json%20其中%20url%20%3D%22http%3A%2F%2Fgoo.gl%2FqMlPxn%22&format=json&diagnostics=true&callback=“,
成功:功能(数据){
var$select=$('select');var$option=“”;
$.each(data.query.results.json.json,函数(索引,i){
smallchoice=i.choice.split(',');
$.each(smallchoice,函数(i,smallchoice){
$option=$(“”).attr(“值”,smallchoice).text(i.bigcat++++(i.cat|||“”)+“@”smallchoice);
});
$select.append($option);
});
$select.dynamicDropdown({“分隔符”:“@”});
}
});
但我不知道如何为每个小选择分配bigcat
和cat
。有人能给我一些建议吗?您正在尝试手动解析Json对象。Jquery不需要这样做。Jquery有一个内置的parseJson()方法,可以将格式良好的json对象转换为javascript对象。或者,正如利亚姆建议的那样,您还可以在$.ajax()选项中指定数据类型为json,它将自动解析对象的结果数据响应
然后,您还可以使用数组[“摔跤”、“比赛”]代替|分隔的列表进行选择。这两种方法结合在一起可以大大帮助您并简化代码
总结一下:在ajax选项中添加数据类型:“json”
,并使用数组来存储选项,而不是分隔列表
(根据meta建议的注释更新)。您正在尝试手动解析Json对象。Jquery不需要这样做。Jquery有一个内置的parseJson()方法,可以将格式良好的json对象转换为javascript对象。或者,正如利亚姆建议的那样,您还可以在$.ajax()选项中指定数据类型为json,它将自动解析对象的结果数据响应
然后,您还可以使用数组[“摔跤”、“比赛”]代替|分隔的列表进行选择。这两种方法结合在一起可以大大帮助您并简化代码
总结一下:在ajax选项中添加数据类型:“json”
,并使用数组来存储选项,而不是分隔列表
(根据meta建议的注释更新)。事实上,如果您只指定数据类型
为json
,它将为您解析它,因此您的数据
是一个对象。另外,我注意到,您需要小心变量和闭包的名称。。。尤其是函数(i,smallchoice)
当您已经在上面几行声明了相同的变量时。把它换成其他东西,比如函数(j,choice)
,我已经看到了一些不是“未定义”的东西,事实上,如果你只指定数据类型是json
,它会为你解析它,所以你的数据是一个对象。还有,我注意到一件事,你需要注意变量和闭包的名称。。。尤其是函数(i,smallchoice)
当您已经在上面几行声明了相同的变量时。把它换成别的东西,比如function(j,choice)
,我已经看到了一些不是“未定义”的东西