我遇到的问题是,对象内部关联的嵌套数组会导致获取声明失败。实际的JSON本身是有效的,当数组本身被注释时,它工作正常。我想解析整个对象,最终访问数组。
这是对象(恶意数组在“第2页”项目中):
{
"identifier":"pageTitle",
"label":"pageTitle",
"items":[
{
"pageTitle":"Page 1",
"pageUrl":"#"
},
{
"pageTitle":"Page 2",
"subTopics":[
{
"subTitle":"Subpage 1"
}
],
"pageUrl":"index.html"
},
{
"pageTitle":"Page 3",
"pageUrl":"#"
}
]
}
和获取代码(相当简单)
try {
var JSONObject = new dojo.data.ItemFileReadStore({url: "object.json"});
//Fetch nav objects and start building
JSONObject.fetch({
query: {"pageTitle":"*"},
onBegin: clearNav,
onComplete: buildNav,
onError: failureNav
});
} catch(xcept) {
console.warn("Failed to create JSONObject", xcept);
}
及相关功能
function clearNav(items, req) {
console.log("clearNav()");
dojo.query("nav.navigation ul").forEach(function(items, idx) {
items.innerHTML="";
});
console.warn("Navigation destroyed...");
}
function buildNav(items, req) {
console.log("buildNav()");
console.debug("items", items);
var theList = dojo.query("nav.navigation ul")[0];
dojo.forEach(items, function(item, idx) {
var newLI = document.createElement("li");
console.warn("url", document.URL);
if (document.URL.search(item.pageUrl)) {
newLI.setAttribute("class","ac");
}
newLI.innerHTML = "<a href=\""+item.pageUrl+"\" >"+item.pageTitle+"</a>";
theList.appendChild(newLI);
});
}
function failureNav(e) {
console.debug("Error", e);
}
答案 0 :(得分:3)
您有两种选择:
格式化您的JSON嵌套对象(“subTopicts”)以符合具有相同标识符的主要对象;
{
"identifier":"pageTitle",
"label":"pageTitle",
"items":[
{
"pageTitle":"Page 1",
"pageUrl":"#"
},
{
"pageTitle":"Page 2",
"subTopics":[
{
"pageTitle":"Page 1.1",
"subTitle":"Subpage 1"
}
],
"pageUrl":"index.html"
},
{
"pageTitle":"Page 3",
"pageUrl":"#"
}
]
}
或者让Dojo忽略该嵌套对象,使用参数herarchical创建ItemFileReadStore:“false”
var JSONObject = new dojo.data.ItemFileReadStore({
url: "object.json",
hierarchical: false
});
您可以在doc中找到此文档。