javascript - 如何遍历有效的 JSON

标签 javascript jquery json

我向 PHP 脚本发出了 Ajax 请求,PHP 脚本返回了这个 JSON 对象,当我使用 link text 进行测试时它说它是有效的

[
  {
    "id_annotation": "1",
    "annot_doc_id": "page_de_test.html",
    "annot_id_auteur": "2",
    "anno_startOffset": "47",
    "annot_startContainer": "id-aaa",
    "annot_endOffset": "88",
    "annot_forme": "1",
    "annot_value": "dispositif physique fait pour \n  stocker ",
    "annot_obj": "1",
    "annot_area": "",
    "annot_date": "vendredi 25 juin 2010 10:38:07"
  },
  {
    "id_annotation": "2",
    "annot_doc_id": "page_de_test.html",
    "annot_id_auteur": "2",
    "anno_startOffset": "122",
    "annot_startContainer": "id-aaa",
    "annot_endOffset": "200",
    "annot_forme": "1",
    "annot_value": " le plus simple est \n  d\u2019utiliser un syst\u00e8me de repr\u00e9sentation \u00e0 deux chiffres",
    "annot_obj": "1",
    "annot_area": "",
    "annot_date": "vendredi 25 juin 2010 10:38:19"
  },
  {
    "id_annotation": "3",
    "annot_doc_id": "page_de_test.html",
    "annot_id_auteur": "2",
    "anno_startOffset": "1",
    "annot_startContainer": "ident-77",
    "annot_endOffset": "146",
    "annot_forme": "1",
    "annot_value": "Dans un ordinateur, le dispositif qui permet de stocker de l\u2019information est donc \n  rudimentaire, bien plus rudimentaire que les mains humaines.",
    "annot_obj": "1",
    "annot_area": "",
    "annot_date": "vendredi 25 juin 2010 10:38:25"
  },
  {
    "id_annotation": "4",
    "annot_doc_id": "page_de_test.html",
    "annot_id_auteur": "2",
    "anno_startOffset": "107",
    "annot_startContainer": "ident-77",
    "annot_endOffset": "194",
    "annot_forme": "1",
    "annot_value": "crobaties avec ses doigts, mais \u00e9cartons ce cas). Avec un \n  emplacement d\u2019information ",
    "annot_obj": "1",
    "annot_area": "",
    "annot_date": "vendredi 25 juin 2010 10:38:33"
  }
]

但问题是当我尝试使用这个函数循环遍历这个 json 响应时,函数只执行了一次,我想知道如何循环遍历这个返回的 JSON

success: function(data) {
  var mon_selection_2;
  var mon_range;
  resultText = eval(data);
  var resultText_length = resultText.length;
  for (var i = 0; i < resultText_length; i++) {
    mon_selection_2 = window.getSelection();
    mon_selection_2.removeAllRanges();
    mon_range = document.createRange();
    mon_selection_2.addRange(mon_range);
    id_annotation_js = resultText[i].id_annotation;
    anno_startOffset_js = resultText[i].anno_startOffset;
    annot_startContainer_js = resultText[i].annot_startContainer;
    annot_endOffset_js = resultText[i].annot_endOffset;
    annot_value_js = resultText[i].annot_value;
    annot_forme_js = resultText[i].annot_forme;
    var start_Node = document.getElementById(annot_startContainer_js);
    var textNode = start_Node.firstChild;
    mon_range.setStart(textNode, anno_startOffset_js);
    mon_range.setEnd(textNode, annot_endOffset_js);
    var Gras_ele_js = document.createElement("span");
    Gras_ele_js.setAttribute("style", "color:black;font-size:14px;font-weight:bolder");
    Gras_ele_js.setAttribute("value", mon_range);
    Gras_ele_js.setAttribute("id", id_annotation_js);
    mon_range.surroundContents(Gras_ele_js);
  }
}

最佳答案

好吧,有了这条线

resultText = eval(data);

您将字符串转换为 javascript 对象。你不应该那样做(使用 eval),即使它是所有方法中最快的,因为如果有大量的安全原因。

应该使用 jQuery 自己的实现 $.parseJSON() 或者,如果可用,浏览器集成 JSON 解析器,例如 window .JSON.parse();

对于你的问题,你需要在这里循环一个对象。

$.each(resultText, function(i,v)){
   $.each(v, function(index,value){
      anno_startOffset_js = value.anno_startOffset;
      // or anno_startOffset_js = value['anno_startOffset'];
   });
};

关于javascript - 如何遍历有效的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3117488/

相关文章:

javascript - 将 apply 与 jQuery 结合使用

javascript - css样式根据动态内容设置div else的最小宽度

jquery - 如何使用 javascript/jquery 将最深的 TD 更改为颜色?

javascript - 需要一个能找到 "string"但找不到 "[string]"的正则表达式

javascript - 为什么这个 animate() jquery 函数脚本不起作用?

javascript - 如何从字符串创建 JS 对象

json - response.json 不是函数。 Angular 火

javascript - 使用 D3 将多个图表添加到一页

java - 为什么 JSON 不需要 setXXX 方法?

javascript - 又是: how can I read a file using javascript