简体   繁体   English

如何遍历有效的 JSON

[英]How to loop over a valid JSON

I have made an Ajax request to a PHP script and that PHP script returned this JSON object and when i tested with link text it says it's valid我向 PHP 脚本发出了 Ajax 请求,该 PHP 脚本返回了这个 JSON 对象,当我使用链接文本进行测试时,它说它是有效的

[
  {
    "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"
  }
]

But the problem was when i tried ti loop over this json response by using this function, the fonction get excuted just one time, I want to know how to loop over this returned JSON但问题是当我尝试使用此函数循环遍历此 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);
  }
}

well, with this line好吧,有了这条线

resultText = eval(data);

you convert the string into a javascript object.您将字符串转换为 javascript 对象。 You shouldn't do it that way (using eval), even if it's the fastest of all ways, because if massive security reasons.你不应该那样做(使用 eval),即使它是所有方法中最快的,因为如果有大量的安全原因。

You should use jQuerys very own implementation $.parseJSON() or, if available, browsers integrated JSON parser like window.JSON.parse() ;应该使用 jQuery 自己的实现$.parseJSON()或者,如果可用,浏览器集成了JSON解析器,如window.JSON.parse()

To your question, you need to loop over an object here.对于你的问题,你需要在这里循环一个对象。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM