我的页面上有两个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"
}
答案 0 :(得分:0)
您正在测试null和empty,但未定义。这不是一回事。
最有可能的是,这就是正在发生的事情。要解析的第一个对象是没有articleSection属性的对象。在这种情况下,jsonParsed.articleSection是未定义的,因此当您针对null和空字符串测试它时,它仍然在循环内部。并返回undefined。
可能不会对空字符串进行测试。只测试null和undefined
答案 1 :(得分:0)
要检查articleSection
中的jsonParsed
,您可以使用if (jsonParsed.articleSection){
,这会检查null
,undefined
和空字符串。
您的代码无法正常工作的原因是JSON格式错误,如JSON
<script type="application/ld+json">
{
"@context" : "http://schema.org",
"@type" : "Organization",
}
</script>
,
之后你有'Organization'
,删除它就可以了。
现场演示
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;