【问题标题】:JSON string array is always nullJSON 字符串数组始终为空
【发布时间】:2016-02-11 20:49:16
【问题描述】:

我有一些在服务器端呈现的 JSON 数据可在客户端页面中使用。在 HTTP 响应中,它看起来是正确的:

digitalData = {
    "page": {
        "pageInfo": {
            "geoRegion": "US",
            "onsiteSearchResults": 38,
            "onsiteSearchTerm": "leather",
            "sysEnv": "HAMP"
        },
        "category": {
            "dirID": 2,
            "pageTemplate": "/store/search.aspx",
            "pageType": "Search"
        },
        "attributes": {
            "searchType": "standard",
            "refinementCategory": "10001",
            "searchFilters": ["50859"]
        }
    },
    "user": {
        "profile": {
            "profileInfo": {
                "profileID": "{C0A253A9-AD6E-4B6B-A313-3D215704D0FB}",
                "returningStatus": "new"
            }
        },
        "segment": {
            "persona": ["EXPERT"]
        }
    },
    "cart": {
        "cartID": "2508d65f-6495-4256-8125-75767b847e45",
        "numItems": 0
    },
    "version": "1.0"
};

但是当我通过 Dev Tools Elements 或 Console 检查 DOM 时,上面 JSON 中的 searchFilters 字符串数组始终为空。我根本没有引用该对象的客户端代码。它如何/为什么从 HTTP 响应中的正确变为 DOM 中的 null?我已经在 J​​SONLint 中验证了 JSON,它是有效的。

【问题讨论】:

  • digitalData = 不是 JSON
  • 检查 DOM 与 searchFilters 的值有什么关系?您发布的只是一个对象结构,并说它是“错误的”。
  • 在响应中你应该只得到 JSON,没有之前的赋值和之后的分号
  • 这篇文章中没有 JSON...也没有太多我可以破译的问题...
  • 您能否将使用此数据的代码发布到重复错误的 JsFiddle 中。目前,这里没有足够的细节来确定问题。

标签: arrays json


【解决方案1】:

JSON 有效。添加方括号,然后重试。

var objArray= [{
	"page": [{
		"pageInfo": [{
			"geoRegion": "US",
			"onsiteSearchResults": 38,
			"onsiteSearchTerm": "leather",
			"sysEnv": "HAMP"
		}],
		"category": [{
			"dirID": 2,
			"pageTemplate": "/store/search.aspx",
			"pageType": "Search"
		}],
		"attributes": [{
			"searchType": "standard",
			"refinementCategory": "10001",
			"searchFilters": ["50859"]
		}]
	}],
	"user": [{
		"profile": {
			"profileInfo": {
				"profileID": "{C0A253A9-AD6E-4B6B-A313-3D215704D0FB}",
				"returningStatus": "new"
			}
		},
		"segment": {
			"persona": ["EXPERT"]
		}
	}],
	"cart": [{
		"cartID": "2508d65f-6495-4256-8125-75767b847e45",
		"numItems": 0
	}],
	"version": "1.0"
}];


function getDetails(){
	
	document.getElementById("demo").innerHTML = "Length of Array = " + objArray.length;
	document.getElementById("element").innerHTML = "0th Element of Array = " + objArray[0];
	document.getElementById("elementInfo").innerHTML = "Element at 0th position Array = " + objArray[0].page[0].pageInfo;	
	document.getElementById("elementInfo2").innerHTML = "Element at 00th position Array = " + objArray[0].page[0].pageInfo[0].geoRegion;

}
<button onclick=getDetails()> Check </button>

<p id="demo"></p>
<p id="element"></p>
<p id="elementInfo"></p>
<p id="elementInfo2"></p>

【讨论】:

  • 我的顶级对象不是数组,所以我认为我不需要括号。我有一个包含 searchFilters 字符串数组的对象,该数组正确地包含括号。但是 object.page.attributes.searchFilters 在浏览器控制台中评估时始终评估为 null,即使它在 HTTP 响应中看起来是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
  • 2014-08-18
相关资源
最近更新 更多