如何在JSON结果中展平关联对
How to flatten association pairs in JSON result?
我从服务器收到一个数组,其中包含对象和关联表。例如,我有来自服务器的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"
}
]
}
}
}
试试这个:
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"
}
]
}
}
相关文章:
- 奇怪的Javascript结果
- Javascript(jQuery)给了我奇怪的结果
- JSONP请求返回结果,但也触发error_callback
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Javascript,输出结果后页面不断刷新
- 这是使用html快照和谷歌获取的预期结果吗?SEO/SPA
- 将地理编码结果转换为php变量以发布到mysql数据库
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- JQuery:向多个匹配结果添加换行符的最简单方法
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- webpack代码拆分了handlerbs文件——结果是文件很大
- JavaScript循环无法正确计算/显示结果
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 试图将onChange函数作为道具传递给GrandChlidren,结果是TypeError:这是未定义的
- jQuery使用api获取typeform结果
- 根据条件检查数据库结果
- 如何在JSON结果中展平关联对
- typeahead方法返回关联的结果
- {{result}}和$scope.结果关联在AngularJS中