【发布时间】:2014-08-25 02:31:48
【问题描述】:
所以我有一个 JSON 结构,我必须将其解析为不同的结构。我做到了,但我看到其中一个节点的值有误。
如果 BodyId = value 且 TrId = null 且 TdId = null 则 Body Id 是父节点。 如果 BodyId = value 且 TrId = value 且 TdId = null 则 TrId 是父节点的子节点。 如果 BodyId = value 且 TrId = value 且 TdId = value 则 TdId 是前一个子节点的子节点。
BodyId>TrId>TdId
这里是 JSON 和解析:
var data = [
{
"BodyId": 1,
"TrId": null,
"TdId": null,
"Title": "BodyId1",
"Status": "Ok"
}, {
"BodyId": 2,
"TrId": null,
"TdId": null,
"Title": "BodyId2",
"Status": "Ok"
}, {
"BodyId": 3,
"TrId": null,
"TdId": null,
"Title": "BodyId3",
"Status": "Ok"
}, {
"BodyId": 1,
"TrId": 1,
"TdId": null,
"Title": "TrId1",
"Status": "Ok"
}, {
"BodyId": 1,
"TrId": 2,
"TdId": null,
"Title": "TrId2",
"Status": "Ok"
}, {
"BodyId": 2,
"TrId": 1,
"TdId": null,
"Title": "TrId1",
"Status": "Ok"
}, {
"BodyId": 2,
"TrId": 2,
"TdId": null,
"Title": "TrId2",
"Status": "Ok"
}, {
"BodyId": 3,
"TrId": 1,
"TdId": null,
"Title": "TrId1",
"Status": "Ok"
}, {
"BodyId": 3,
"TrId": 2,
"TdId": null,
"Title": "TrId2",
"Status": "Ok"
},
{
"BodyId": 3,
"TrId": 3,
"TdId": null,
"Title": "TrId3",
"Status": "Ok"
},
{
"BodyId": 1,
"TrId": 1,
"TdId": 1,
"Title": "TdId1",
"Status": "Ok"
}, {
"BodyId": 1,
"TrId": 1,
"TdId": 2,
"Title": "TdId2",
"Status": "Ok"
}, {
"BodyId": 2,
"TrId": 1,
"TdId": 1,
"Title": "TdId1",
"Status": "Ok"
}, {
"BodyId": 2,
"TrId": 1,
"TdId": 2,
"Title": "TdId2",
"Status": "Ok"
}, {
"BodyId": 2,
"TrId": 2,
"TdId": 1,
"Title": "TdId1",
"Status": "Ok"
}, {
"BodyId": 3,
"TrId": 3,
"TdId": 1,
"Title": "TdId1",
"Status": "Ok"
}];
var json = [];
var tdArray = [];
for(key=0; key < data.length; key++)
{
var singleBodyId = null;
var singleTrId = null;
var singleTd = null;
if(data[key].TrId === null)
{
//parent ID
json.push(data[key]);
singleBodyId = data[key].BodyId;
var trArray = [];
for(i = 0; i < data.length; i++)
{
if(data[i].BodyId === singleBodyId && data[i].TrId !== null && data[i].TdId === null)
{
//child array of parent ID
trArray.push(data[i]);
}
for(w=0;w<trArray.length;w++)
{
if(data[i].BodyId === trArray[w].BodyId && data[i].TrId == trArray[w].TrId && data[i].TdId !== null)
{
//child array of child array
tdArray.push(data[i]);
}
}
}
for(q = 0; q < json.length; q++ )
{
if(json[q].BodyId === singleBodyId)
{
json[q].TrId = trArray;
for(t=0;t<json[q].TrId.length;t++)
{
for(c=0;c<tdArray.length;c++)
{
if(tdArray[c].BodyId === json[q].TrId[t].BodyId && tdArray[c].TrId === json[q].TrId[t].TrId)
{
json[q].TrId[t].TdId = tdArray[c];
}
}
}
}
}
}
}
document.getElementById("print").innerHTML = JSON.stringify(json);
<p id="print"></p>
这是此解析的输出,我添加了值错误的 cmets。 JSFiddle example
[{
"BodyId": 1,
"TrId": [{
"BodyId": 1,
"TrId": 1,
"TdId": {
"BodyId": 1,
"TrId": 1,
"TdId": 2, //this should be "TdId": 1
"Title": "TdId2", //this should be "Title": 1
"Status": "Ok"
},
"Title": "TrId1",
"Status": "Ok"
},
{
"BodyId": 1,
"TrId": 2,
"TdId": null, //this should be "TdId": 2
"Title": "TrId2", //this should be "Title": "TdId2"
"Status": "Ok"
}],
"TdId": null,
"Title": "BodyId1",
"Status": "Ok"
}, //the whole "TrId": 2 is missing and the rest of the JSON is repeating the same errors
{
"BodyId": 2,
"TrId": [{
"BodyId": 2,
"TrId": 1,
"TdId": {
"BodyId": 2,
"TrId": 1,
"TdId": 2,
"Title": "TdId2",
"Status": "Ok"
},
"Title": "TrId1",
"Status": "Ok"
},
{
"BodyId": 2,
"TrId": 2,
"TdId": {
"BodyId": 2,
"TrId": 2,
"TdId": 1,
"Title": "TdId1",
"Status": "Ok"
},
"Title": "TrId2",
"Status": "Ok"
}],
"TdId": null,
"Title": "BodyId2",
"Status": "Ok"
},
{
"BodyId": 3,
"TrId": [{
"BodyId": 3,
"TrId": 1,
"TdId": null,
"Title": "TrId1",
"Status": "Ok"
},
{
"BodyId": 3,
"TrId": 2,
"TdId": null,
"Title": "TrId2",
"Status": "Ok"
},
{
"BodyId": 3,
"TrId": 3,
"TdId": {
"BodyId": 3,
"TrId": 3,
"TdId": 1,
"Title": "TdId1",
"Status": "Ok"
},
"Title": "TrId3",
"Status": "Ok"
}],
"TdId": null,
"Title": "BodyId3",
"Status": "Ok"
}]
如果我有错误,我将不胜感激! 提前致谢!
【问题讨论】:
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。
-
添加了更多信息,希望这就足够了。
标签: javascript json parsing