遍历页面上的所有JSON并查找特定ID

时间:2017-11-17 16:37:58

标签: javascript arrays json

我的页面上有两个JSON,第二个包含特定对象'articleSection',第一个没有。我试图遍历所有脚本,直到找到JSON,然后遍历每个JSON以确定'articleSection是否存在'。如果确实存在,我想返回'articleSection。

的值

我已经走到了这一步,但回报总是未定义的。

function getJSON() {
  var JSONS = document.getElementsByTagName("Script")

  for (i=0; i<JSONS.length;i++){
    if (JSONS[i].getAttribute("type") == "application/ld+json"){
      var jsonParsed = JSON.parse(JSONS[i].innerText);
          if (jsonParsed.articleSection != null && jsonParsed.articleSection != ""){ 
            return jsonParsed.articleSection;
            }
      }
 }
}

我的想法是我没有正确地遍历每个JSON脚本,而只是通过初始if JSONS[i].getAttribute("type") == "application/ld+json

中找到的第一个脚本。

JSON For Refrence:

JSON ONE:

<script type="application/ld+json">
      {
        "@context" : "http://schema.org",
        "@type" : "Organization",
      }
    </script>

JSON TWO:

<script type="application/ld+json">
        {
          "@context": "http://schema.org",
          "@type": "Article",
          "keywords": "",
          "author": {
            "@type": "Person",
            "name": "Staff"
          },
          "articleSection": "Christmas, Festivals, Events, Life, Arts"
}

2 个答案:

答案 0 :(得分:0)

您正在测试null和empty,但未定义。这不是一回事。

最有可能的是,这就是正在发生的事情。要解析的第一个对象是没有articleSection属性的对象。在这种情况下,jsonParsed.articleSection是未定义的,因此当您针对null和空字符串测试它时,它仍然在循环内部。并返回undefined。

可能不会对空字符串进行测试。只测试null和undefined

答案 1 :(得分:0)

要检查articleSection中的jsonParsed,您可以使用if (jsonParsed.articleSection){,这会检查nullundefined和空字符串。 您的代码无法正常工作的原因是JSON格式错误,如JSON

<script type="application/ld+json">
  {
    "@context" : "http://schema.org",
    "@type" : "Organization",
  }
</script>

,之后你有'Organization',删除它就可以了。

现场演示

&#13;
&#13;
function getJSON() {
  var JSONS = document.querySelectorAll("script[type='application/ld+json']");
  for (var i=0; i<JSONS.length;i++){
      var jsonParsed = JSON.parse(JSONS[i].innerHTML);
      if (jsonParsed.articleSection){ 
        return jsonParsed.articleSection;
      }
   }
}
console.log(getJSON());
&#13;
<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "Organization"
  }
</script>

<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "Article",
    "keywords": "",
    "author": {
      "@type": "Person",
      "name": "Staff"
    },
    "articleSection": "Christmas, Festivals, Events, Life, Arts"
  }
</script>
&#13;
&#13;
&#13;