【问题标题】:JSON array to JSON with emebeded arrays parsing problemsJSON数组到带有嵌入式数组解析问题的JSON
【发布时间】: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


【解决方案1】:

好的,我想我会为我自己的问题发布一个答案,谢谢大家的帮助:)

如果有人需要,这段代码运行良好。 有一个升级的地方,即:与其使用 delete obj,不如使用“splice”,但由于某些原因,它对我不起作用,所以我使用了 delete,然后我创建了没有空值的新数组,这在使用 delete 后发生.

var body = [];
var tr = [];
var dataTmp = [];

for(key=0; key < data.length; key++)
{
    if(data[key].TrId === null)
    {    
        data[key].TrId = [];
        body.push(data[key]);
        delete data[key];
    } 
}
for(key=0; key < data.length; key++)
{
    if(data[key] != null)
    {
        dataTmp.push(data[key]);
    } 
}
data = dataTmp;
dataTmp = [];

for(key=0; key < data.length; key++)
{
    if(data[key].TrId !== null && data[key].TdId === null)
    {
        tr.push(data[key]);
        delete data[key];
    } 
}
for(key=0; key < data.length; key++)
{
    if(data[key] != null)
    {
        dataTmp.push(data[key]);
    } 
}
data = dataTmp;

for(key=0; key<body.length; key++)
{
    for(i=0;i<tr.length;i++)
    { 
        if(body[key].BodyId === tr[i].BodyId)
        {   
            tr[i].TdId = [];
            body[key].TrId.push(tr[i]);
        }
    }
}
for(key=0;key<body.length; key++)
{
    for(i=0; i<body[key].TrId.length; i++)
    {
        for(k=0; k<data.length; k++)
        {
            if(body[key].TrId[i].BodyId === data[k].BodyId && body[key].TrId[i].TrId === data[k].TrId)
            {
                body[key].TrId[i].TdId.push(data[k]); 
            }
        }
    }
}
document.getElementById("print").innerHTML = JSON.stringify(body);

【讨论】:

    猜你喜欢
    • 2020-01-20
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    相关资源
    最近更新 更多