Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将json对象拆分为一个数组,并为每个数组分配其他对象_Javascript_Jquery_Json_Split - Fatal编程技术网

Javascript 将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" }

使用第一个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"
  }
]
使用第二个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)
,我已经看到了一些不是“未定义”的东西