如何展平 JSON 结果中的关联对?

发布于 2025-01-02 03:42:23 字数 1743 浏览 2 评论 0原文

我从服务器收到一个包含对象和关联表的数组。例如,我从服务器获得了以下 JSON 结果:

var myEvent = {
   "Event":{
      "SessionTags":[
         {
            "SessionID":1,
            "TagID":x
         },
         {
            "SessionID":2,
            "TagID":x
         },
         {
            "SessionID":2,
            "TagID":y
         },
         {
            "SessionID":3,
            "TagID":z
         }
      ],
      "Sessions":[
         {
            "ID":1,
            "Name":"Advanced Tips",
         },
         {
            "ID":2,
            "Name":"Best Practices"
         },
         {
            "ID":3,
            "Name":"Code Fun"
         },
      "Tags":[
         {
            "ID":x,
            "Name":"AJAX"
         },
         {
            "ID":y,
            "Name":"Android"
         },
         {
            "ID":z,
            "Name":"ASP.NET"
         },
      ]
   }
}

注意用作关联表的“SessionTags”对象。如何在会话标记中添加正确的标记对象,以便我最终得到以下结果:

var myNewEvent = {
   "Event":{
      "Sessions":[
         {
            "ID":1,
            "Name":"Advanced Tips",
            "Tags":[
              {
               "ID":x,
               "Name":"AJAX"
              }
            ]
         },
         {
            "ID":2,
            "Name":"Best Practices",
            "Tags":[
              {
               "ID":x,
               "Name":"AJAX"
              },
              {
               "ID":y,
               "Name":"Android"
              }
            ]
         },
         {
            "ID":3,
            "Name":"Code Fun",
            "Tags":[
              {
               "ID":z,
               "Name":"ASP.NET"
              }
            ]
         }
   }
}

I receive an array from a server which contains objects and association tables. So for example, I have this JSON result from the server:

var myEvent = {
   "Event":{
      "SessionTags":[
         {
            "SessionID":1,
            "TagID":x
         },
         {
            "SessionID":2,
            "TagID":x
         },
         {
            "SessionID":2,
            "TagID":y
         },
         {
            "SessionID":3,
            "TagID":z
         }
      ],
      "Sessions":[
         {
            "ID":1,
            "Name":"Advanced Tips",
         },
         {
            "ID":2,
            "Name":"Best Practices"
         },
         {
            "ID":3,
            "Name":"Code Fun"
         },
      "Tags":[
         {
            "ID":x,
            "Name":"AJAX"
         },
         {
            "ID":y,
            "Name":"Android"
         },
         {
            "ID":z,
            "Name":"ASP.NET"
         },
      ]
   }
}

Notice the "SessionTags" object that is used as an association table. How do I add the right tag object in the session tag so I end up with this:

var myNewEvent = {
   "Event":{
      "Sessions":[
         {
            "ID":1,
            "Name":"Advanced Tips",
            "Tags":[
              {
               "ID":x,
               "Name":"AJAX"
              }
            ]
         },
         {
            "ID":2,
            "Name":"Best Practices",
            "Tags":[
              {
               "ID":x,
               "Name":"AJAX"
              },
              {
               "ID":y,
               "Name":"Android"
              }
            ]
         },
         {
            "ID":3,
            "Name":"Code Fun",
            "Tags":[
              {
               "ID":z,
               "Name":"ASP.NET"
              }
            ]
         }
   }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晨敛清荷 2025-01-09 03:42:23

试试这个:

var getTagName = function(tagId){
    var t = myEvent["Event"]["Tags"];
    for (var i in t); {
        if (t[i].ID == tagId) {
            return t[i].Name;
        }
    }
};

var getTags = function(sessionId){
    var s = myEvent["Event"]["SessionTags"];
    var tags = [];
    for (var i in s) {
        if (s[i]["SessionID"] == sessionId) {
            var tagName = getTagName(s[i]["TagID"]);
            tags.push({"ID": sessionId, "Name": tagName});
        }
    }
    return tags;
};

var addSessionTags = function(){
    var s = myEvent["Event"]["Sessions"];
    for (var i in s) {
        var currentSession = s[i];
        currentSession.Tags = getTags(currentSession.ID);
    }
};

addSessionTags();

delete myEvent.Event.Tags;
delete myEvent.Event.SessionTags;

我必须稍微清理你的数据(x、y、z的ID没有引用任何变量,而且你还有一些额外的逗号和缺少的右括号)才能得到它对于这个例子是可行的:

var myEvent = {
   "Event":{
      "SessionTags":[
         {
            "SessionID":1,
            "TagID":"x"
         },
         {
            "SessionID":2,
            "TagID":"x"
         },
         {
            "SessionID":2,
            "TagID":"y"
         },
         {
            "SessionID":3,
            "TagID":"z"
         }
      ],
      "Sessions":[
         {
            "ID":1,
            "Name":"Advanced Tips",
         },
         {
            "ID":2,
            "Name":"Best Practices"
         },
         {
            "ID":3,
            "Name":"Code Fun"
         }
     ],
      "Tags":[
         {
            "ID":"x",
            "Name":"AJAX"
         },
         {
            "ID":"y",
            "Name":"Android"
         },
         {
            "ID":"z",
            "Name":"ASP.NET"
         }
      ]
   }
}

Try this:

var getTagName = function(tagId){
    var t = myEvent["Event"]["Tags"];
    for (var i in t); {
        if (t[i].ID == tagId) {
            return t[i].Name;
        }
    }
};

var getTags = function(sessionId){
    var s = myEvent["Event"]["SessionTags"];
    var tags = [];
    for (var i in s) {
        if (s[i]["SessionID"] == sessionId) {
            var tagName = getTagName(s[i]["TagID"]);
            tags.push({"ID": sessionId, "Name": tagName});
        }
    }
    return tags;
};

var addSessionTags = function(){
    var s = myEvent["Event"]["Sessions"];
    for (var i in s) {
        var currentSession = s[i];
        currentSession.Tags = getTags(currentSession.ID);
    }
};

addSessionTags();

delete myEvent.Event.Tags;
delete myEvent.Event.SessionTags;

I had to clean up your data slightly (IDs of x,y,z didn't refer to any variables, and you also have some extra commas and a missing closing bracket) to get it to be workable for the example:

var myEvent = {
   "Event":{
      "SessionTags":[
         {
            "SessionID":1,
            "TagID":"x"
         },
         {
            "SessionID":2,
            "TagID":"x"
         },
         {
            "SessionID":2,
            "TagID":"y"
         },
         {
            "SessionID":3,
            "TagID":"z"
         }
      ],
      "Sessions":[
         {
            "ID":1,
            "Name":"Advanced Tips",
         },
         {
            "ID":2,
            "Name":"Best Practices"
         },
         {
            "ID":3,
            "Name":"Code Fun"
         }
     ],
      "Tags":[
         {
            "ID":"x",
            "Name":"AJAX"
         },
         {
            "ID":"y",
            "Name":"Android"
         },
         {
            "ID":"z",
            "Name":"ASP.NET"
         }
      ]
   }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文