Javascript 循环获取JSON结果

Javascript 循环获取JSON结果,javascript,jquery,json,Javascript,Jquery,Json,我无法循环返回的JSON结果。如果结果与某些需求匹配,则将它们附加到元素中。是的,我还在学习:) 返回的结果如下所示[text][text2][text3]bla,blabla,blabla。 我只想抓住括号中的元素。之后,需要拆下这些支架,并将清洁后的结果放入元件中 所以我得到的是: $.getJSON('some-url?format=json', function(e) { var keywords = e.shop.keywords; //result = [text][tex

我无法循环返回的JSON结果。如果结果与某些需求匹配,则将它们附加到
  • 元素中。是的,我还在学习:)

    返回的结果如下所示
    [text][text2][text3]bla,blabla,blabla
    。 我只想抓住括号中的元素。之后,需要拆下这些支架,并将清洁后的结果放入
  • 元件中

    所以我得到的是:

     $.getJSON('some-url?format=json', function(e) {
    
       var keywords = e.shop.keywords; //result = [text][text2][text3]bla,blabla, blabla
    
        $(keywords).each(function(i, keys) {
          var keys = keywords.match(/\[(.*?)\]/); //matches if text is between brackets
    
           if (keys) {
             var submatch = keys[1];
            }
         });
    
       $('.some-div ul').html('<li>'+submatch+'</li>');
    
     });
    
    $.getJSON('some-url?format=json',函数(e){
    var keywords=e.shop.keywords;//结果=[text][text2][text3]bla,blablabla,blabla
    $(关键字)。每个(功能)(i,键){
    var keys=keywords.match(//\[(.*?\]/);//如果文本位于括号之间,则匹配
    如果(钥匙){
    var子匹配=键[1];
    }
    });
    $('.some div ul').html('
  • '+submatch+'
  • '); });
    像上面这样做会给我一个错误
    error:Syntax error,无法识别的表达式:[text][text2][text3]


    我做错了什么?

    假设
    e.shop.keywords
    是您希望对其执行正则表达式的字符串,只需使用JavaScript的正则表达式
    string#match
    函数并使用
    数组#forEach
    循环结果:

    $.getJSON('some-url?format=json', function(e) {
      // if e.shop.keywords is string "[text][text2][text3]bla,blabla, blabla"
      // perform a regex match on the string...  and loop over using forEach
      var result = e.shop.keywords.match(/\[([^\]]+)\]/g);
      if( result ) {
        result.forEach(function(text){
          // since we're dealing with the entire match rather than match group 1
          // we'll want to chop off the first "[" and last char "]" via substring
          $('.some-div ul').append('<li>'+text.substring(1,text.length-1)+'</li>');
          // also: use append rather than html to avoid overwriting previous li elements
        });
      }
    });
    
    $.getJSON('some-url?format=json',函数(e){
    //如果e.shop.keywords是字符串“[text][text2][text3]bla,blabla,blabla”
    //对字符串执行正则表达式匹配…并使用forEach循环
    var result=e.shop.keywords.match(/\[([^\]]+)\]/g);
    如果(结果){
    result.forEach(函数(文本){
    //因为我们处理的是整场比赛而不是第一组比赛
    //我们希望通过子字符串切掉第一个“[”和最后一个字符“]”
    $('.some div ul').append('
  • '+text.substring(1,text.length-1)+'
  • '); //另外:使用append而不是html来避免覆盖以前的li元素 }); } });
    以上将输出:

    <li>text</li>
    <li>text2</li>
    <li>text3</li>
    
  • 文本
  • 文本2
  • 文本3
  • 您可以独立于AJAX调用对其进行测试:

    "[text][text2][text3]bla,blabla, blabla".match(/\[([^\]]+)\]/g).forEach(function(text){
      console.log('<li>'+text.substring(1,text.length-1)+'</li>');
    });
    
    “[text][text2][text3]bla,blabla,blabla”。匹配(/\[([^\]]+)\]/g)。forEach(函数(文本){
    console.log(“
  • ”+text.substring(1,text.length-1)+“
  • ”); });
    您试图在字符串上使用选择器:
    $(关键字)
    。这肯定不是你想做的。我可以看到这里的混乱,就好像你期望
    关键字
    是一个数组,而它不是

    相反,应该对通过
    var keywords=e.shop.keywords引用的字符串使用正则表达式
    .match()
    。然后,您应该在“匹配数组”上进行交互,如下所示:

    $.getJSON('some-url?format=json', function(e) {
    
        var keywords = e.shop.keywords; //result = [text][text2][text3]bla,blabla, blabla
        var keys = keywords.match(/\[(.*?)\]/); //matches if text is between brackets
    
        $.each(keys, function(index, value) {
           //Here, index is the index of the array keys
           //value is the matched string.
           $('.some-div ul').append('<li>'+value+'</li>');
        });
    });
    
    $.getJSON('some-url?format=json',函数(e){
    var keywords=e.shop.keywords;//结果=[text][text2][text3]bla,blablabla,blabla
    var keys=keywords.match(//\[(.*?\]/);//如果文本位于括号之间,则匹配
    $。每个(键、函数(索引、值){
    //这里,index是数组键的索引
    //值是匹配的字符串。
    $('.some div ul')。追加('
  • '+value+'
  • '); }); });
    您应该将一个数组传递给
    each()
    函数…
    关键字
    是字符串,对吗?在
    $()
    中包装字符串不会自动将其转换为数组,即使这样,您使用的语法也会出错。查看API如何使用
    $。each()
    如果
    [text][text2][text3]bla,blabla,blabla
    是您的JSON,它完全混乱/无效,我怀疑您的脚本没有抛出错误。编辑:看来这正是你得到的错误。修复服务器返回的有效数据JSON@Thomas:请原谅我没有提到实际数据返回为“[text]”。这很简单,也很有效JSON@Thomas该错误主要是将无效选择器传递给jQuery:
    $(“[text][etc]”
    。JSON响应将通过param
    e
    传入anon函数。如果e.shop.keywords以字符串形式出现,则表明JSON是有效的。这非常有效!然而有一件小事。。。当字符串不匹配时,它返回
    null
    。捕捉得好,@Meules。该代码段已更新,以验证是否从
    String#match