【问题标题】:splitting json object into an array, and assign other objects to each of them将 json 对象拆分为一个数组,并将其他对象分配给每个对象
【发布时间】:2014-07-08 12:34:37
【问题描述】:

Original Fiddle 使用第一个 JSON 文件

Failed Fiddle 使用第二个 JSON 文件。

我无法使用 split$.each 函数从数组中返回每个小选项。

我正在使用来自 this site 的 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 文件如下所示:

第一个 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"
  }
]

我想使用“|”将同一类别的所有选项塞入一个大选项中作为分隔符,像这样:

第二个 JSON 文件

[
  {
    "bigcat": "Sport",
    "cat": "mainstream",
    "choice": "football|basketball"
  },
  {
    "bigcat": "Sport",
    "cat": "niche",
    "choice": "wrestling|racing"
  }
]

并在脚本中使用split$.each 函数返回每个小选项

  $.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":"@"});
    } 
   });

但我不知道如何将bigcatcat 分配给每个小选项。谁能给我建议?

【问题讨论】:

  • 事实上,如果你只是指定 dataTypejson 它会为你解析它,所以你的 data 一个对象。
  • 另外,我注意到的一件事是你需要小心你的变量和闭包的名称......尤其是function(i,smallchoice)当你已经在上面几行声明了相同的变量时。将其更改为其他内容,例如function(j, choice),我已经看到了一些不是“未定义”的内容

标签: javascript jquery json split


【解决方案1】:

您正在尝试手动解析您的 Json 对象。 Jquery 不需要这样做。 Jquery 有一个内置的 parseJson() 方法,可以将格式良好的 json 对象转换为 javascript 对象。或者,正如 Liam 建议的那样,您还可以在 $.ajax() 选项中指定 dataType 为 json,这将自动将生成的数据响应解析为对象。

您还可以使用数组["wrestling","racing"] 代替| 分隔的列表供您选择。这两种方法结合起来可以帮助您很多并简化您的代码。

总结一下:将 dataType:"json", 添加到您的 ajax 选项中,并使用数组而不是分隔列表来存储选择。

(根据元建议的评论更新)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2015-09-22
    • 2011-02-23
    相关资源
    最近更新 更多