[英]Get all paths in JSON object
Been messing with this for a while and can't get it right. 一直困扰着它,无法正确解决。 I'm trying to create arrays for every path from this JSON. 我正在尝试为此JSON中的每个路径创建数组。
[
{
"WebApp : calendar": {
"count": 3151,
"next": {
"ViewWorkout": {
"count": 521,
"next": {
"BeginUserSession": {
"count": 12,
"next": {}
},
"EditWorkout": {
"count": 134,
"next": {}
},
"WebApp : expandoOpened": {
"count": 116,
"next": {}
},
"Mobile : Feed": {
"count": 2,
"next": {}
},
"WebApp : athleteLoadedFromLibrary": {
"count": 45,
"next": {}
},
"ViewWorkout": {
"count": 108,
"next": {}
},
"WebApp : workoutQuickViewTabmapGraphClicked": {
"count": 18,
"next": {}
},
"DeleteWorkout": {
"count": 9,
"next": {}
},
"WebApp : headerWorkoutIconClicked": {
"count": 3,
"next": {}
},
"WebApp : notificationCenterOpened": {
"count": 14,
"next": {}
},
"WebApp : calendar": {
"count": 3,
"next": {}
},
"WebApp : workoutQuickViewTabsummaryClicked": {
"count": 1,
"next": {}
},
"AddWorkout": {
"count": 8,
"next": {}
},
"DeleteEvent": {
"count": 1,
"next": {}
},
"ViewWorkoutMapAndGraph": {
"count": 2,
"next": {}
},
"WebApp : fileUploadMenuOpened": {
"count": 7,
"next": {}
},
"WebApp : athleteSettingsLoadedFromLibrary": {
"count": 1,
"next": {}
},
"WebApp : workoutQuickViewTabpowerClicked": {
"count": 2,
"next": {}
},
"WebApp : distributionChartLoaded": {
"count": 2,
"next": {}
},
"WebApp : homeViewed": {
"count": 2,
"next": {}
},
"WebApp : loadNotificationFeedbackLocation": {
"count": 3,
"next": {}
},
"Mobile : athleteChanged": {
"count": 1,
"next": {}
},
"WebApp : workoutQuickViewTabheartrateClicked": {
"count": 2,
"next": {}
},
"WebApp : qvUnitsMenutUpdateUnitsToMetricClicked": {
"count": 1,
"next": {}
},
"WebApp : goToLastWeek": {
"count": 4,
"next": {}
},
"WebApp : createWorkoutFromLibrary": {
"count": 2,
"next": {}
},
"AddEvent": {
"count": 1,
"next": {}
},
"ViewAthleteList": {
"count": 1,
"next": {}
},
"WebApp : planLoadedFromLibrary": {
"count": 2,
"next": {}
},
"WebApp : enterFullScreen": {
"count": 1,
"next": {}
},
"WebApp : downloadFileClicked": {
"count": 1,
"next": {}
},
"WebApp : contextMenuOpened": {
"count": 1,
"next": {}
}
}
},
"WebApp : athleteLoadedFromLibrary": {
"count": 1230,
"next": {
"WebApp : calendar": {
"count": 1190,
"next": {}
},
"WebApp : goToLastWeek": {
"count": 3,
"next": {}
},
"ViewWorkout": {
"count": 12,
"next": {}
},
"BeginUserSession": {
"count": 7,
"next": {}
},
"AddWorkout": {
"count": 3,
"next": {}
},
"WebApp : athleteLoadedFromLibrary": {
"count": 7,
"next": {}
},
"WebApp : refreshCalendar": {
"count": 1,
"next": {}
},
"WebApp : quickViewOpened": {
"count": 1,
"next": {}
},
"WebApp : notificationCenterOpened": {
"count": 1,
"next": {}
},
"WebApp : selectCalendarDate": {
"count": 1,
"next": {}
},
"WebApp : goToNextWeek": {
"count": 1,
"next": {}
},
"WebApp : createWorkoutFromLibrary": {
"count": 1,
"next": {}
}
}
},
"WebApp : notificationCenterOpened": {
"count": 276,
"next": {
"WebApp : loadNotificationFeedbackLocation": {
"count": 111,
"next": {}
},
"WebApp : athleteLoadedFromLibrary": {
"count": 76,
"next": {}
},
"ViewWorkout": {
"count": 19,
"next": {}
},
"AddEvent": {
"count": 1,
"next": {}
},
"WebApp : notificationCenterOpened": {
"count": 9,
"next": {}
},
"AddWorkout": {
"count": 5,
"next": {}
},
"BeginUserSession": {
"count": 16,
"next": {}
},
"WebApp : calendar": {
"count": 3,
"next": {}
},
"WebApp : goToLastWeek": {
"count": 2,
"next": {}
},
"WebApp : addAthlete": {
"count": 5,
"next": {}
},
"$campaign_delivery": {
"count": 1,
"next": {}
},
"Mobile : Feed": {
"count": 2,
"next": {}
},
"WebApp : createWorkoutFromLibrary": {
"count": 2,
"next": {}
},
"WebApp : homeViewed": {
"count": 1,
"next": {}
},
"WebApp : dashboardViewed": {
"count": 2,
"next": {}
},
"WebApp : athleteSettingsLoadedFromLibrary": {
"count": 3,
"next": {}
},
"WebApp : calendarLoadedViaLoadDragNDrop": {
"count": 2,
"next": {}
},
"WebApp : groupLoadedFromLibrary": {
"count": 1,
"next": {}
},
"WebApp : workoutQuickViewTabpowerClicked": {
"count": 1,
"next": {}
},
"WebApp : refreshCalendar": {
"count": 1,
"next": {}
},
"CMS : Download Chart Exchange chart": {
"count": 1,
"next": {}
},
"WebApp : selectCalendarDate": {
"count": 1,
"next": {}
}
}
},
"WebApp : planLoadedFromLibrary": {
"count": 24,
"next": {
"WebApp : calendar": {
"count": 23,
"next": {}
},
"AddTrainingPlanWorkout": {
"count": 1,
"next": {}
}
}
}
}
}
}
]
The real end goal is to visualize every path with D3, but right now I'm just trying to figure out how to loop through the data and get all possible paths. 真正的最终目标是使用D3可视化每条路径,但是现在我只是想弄清楚如何遍历数据并获取所有可能的路径。
Output should look something like this and take into account that their may be more levels of the same structure. 输出应该看起来像这样,并考虑到它们可能是同一结构的更多层。
WebApp : calendar (3151) -> ViewWorkout (521) -> BeginUserSession (12)
WebApp : calendar (3151) -> ViewWorkout (521) -> EditWorkout (134)
...
WebApp : calendar (3151) -> WebApp : athleteLoadedFromLibrary (1230) -> WebApp : calendar (731)
I think the following snippet does what you wanted. 我认为以下代码片段可以满足您的需求。
function getPaths(o, root = "", result = []) { var ok = Object.keys(o); return ok.reduce((a,k) => { var p = root + k + "(" + o[k].count + ") -> "; Object.keys(o[k].next).length ? getPaths(o[k].next,p,a) : a.push(p); return a; },result); } var data = [ { "WebApp : calendar": { "count": 3151, "next": { "ViewWorkout": { "count": 521, "next": { "BeginUserSession": { "count": 12, "next": {} }, "EditWorkout": { "count": 134, "next": {} }, "WebApp : expandoOpened": { "count": 116, "next": {} }, "Mobile : Feed": { "count": 2, "next": {} }, "WebApp : athleteLoadedFromLibrary": { "count": 45, "next": {} }, "ViewWorkout": { "count": 108, "next": {} }, "WebApp : workoutQuickViewTabmapGraphClicked": { "count": 18, "next": {} }, "DeleteWorkout": { "count": 9, "next": {} }, "WebApp : headerWorkoutIconClicked": { "count": 3, "next": {} }, "WebApp : notificationCenterOpened": { "count": 14, "next": {} }, "WebApp : calendar": { "count": 3, "next": {} }, "WebApp : workoutQuickViewTabsummaryClicked": { "count": 1, "next": {} }, "AddWorkout": { "count": 8, "next": {} }, "DeleteEvent": { "count": 1, "next": {} }, "ViewWorkoutMapAndGraph": { "count": 2, "next": {} }, "WebApp : fileUploadMenuOpened": { "count": 7, "next": {} }, "WebApp : athleteSettingsLoadedFromLibrary": { "count": 1, "next": {} }, "WebApp : workoutQuickViewTabpowerClicked": { "count": 2, "next": {} }, "WebApp : distributionChartLoaded": { "count": 2, "next": {} }, "WebApp : homeViewed": { "count": 2, "next": {} }, "WebApp : loadNotificationFeedbackLocation": { "count": 3, "next": {} }, "Mobile : athleteChanged": { "count": 1, "next": {} }, "WebApp : workoutQuickViewTabheartrateClicked": { "count": 2, "next": {} }, "WebApp : qvUnitsMenutUpdateUnitsToMetricClicked": { "count": 1, "next": {} }, "WebApp : goToLastWeek": { "count": 4, "next": {} }, "WebApp : createWorkoutFromLibrary": { "count": 2, "next": {} }, "AddEvent": { "count": 1, "next": {} }, "ViewAthleteList": { "count": 1, "next": {} }, "WebApp : planLoadedFromLibrary": { "count": 2, "next": {} }, "WebApp : enterFullScreen": { "count": 1, "next": {} }, "WebApp : downloadFileClicked": { "count": 1, "next": {} }, "WebApp : contextMenuOpened": { "count": 1, "next": {} } } }, "WebApp : athleteLoadedFromLibrary": { "count": 1230, "next": { "WebApp : calendar": { "count": 1190, "next": {} }, "WebApp : goToLastWeek": { "count": 3, "next": {} }, "ViewWorkout": { "count": 12, "next": {} }, "BeginUserSession": { "count": 7, "next": {} }, "AddWorkout": { "count": 3, "next": {} }, "WebApp : athleteLoadedFromLibrary": { "count": 7, "next": {} }, "WebApp : refreshCalendar": { "count": 1, "next": {} }, "WebApp : quickViewOpened": { "count": 1, "next": {} }, "WebApp : notificationCenterOpened": { "count": 1, "next": {} }, "WebApp : selectCalendarDate": { "count": 1, "next": {} }, "WebApp : goToNextWeek": { "count": 1, "next": {} }, "WebApp : createWorkoutFromLibrary": { "count": 1, "next": {} } } }, "WebApp : notificationCenterOpened": { "count": 276, "next": { "WebApp : loadNotificationFeedbackLocation": { "count": 111, "next": {} }, "WebApp : athleteLoadedFromLibrary": { "count": 76, "next": {} }, "ViewWorkout": { "count": 19, "next": {} }, "AddEvent": { "count": 1, "next": {} }, "WebApp : notificationCenterOpened": { "count": 9, "next": {} }, "AddWorkout": { "count": 5, "next": {} }, "BeginUserSession": { "count": 16, "next": {} }, "WebApp : calendar": { "count": 3, "next": {} }, "WebApp : goToLastWeek": { "count": 2, "next": {} }, "WebApp : addAthlete": { "count": 5, "next": {} }, "$campaign_delivery": { "count": 1, "next": {} }, "Mobile : Feed": { "count": 2, "next": {} }, "WebApp : createWorkoutFromLibrary": { "count": 2, "next": {} }, "WebApp : homeViewed": { "count": 1, "next": {} }, "WebApp : dashboardViewed": { "count": 2, "next": {} }, "WebApp : athleteSettingsLoadedFromLibrary": { "count": 3, "next": {} }, "WebApp : calendarLoadedViaLoadDragNDrop": { "count": 2, "next": {} }, "WebApp : groupLoadedFromLibrary": { "count": 1, "next": {} }, "WebApp : workoutQuickViewTabpowerClicked": { "count": 1, "next": {} }, "WebApp : refreshCalendar": { "count": 1, "next": {} }, "CMS : Download Chart Exchange chart": { "count": 1, "next": {} }, "WebApp : selectCalendarDate": { "count": 1, "next": {} } } }, "WebApp : planLoadedFromLibrary": { "count": 24, "next": { "WebApp : calendar": { "count": 23, "next": {} }, "AddTrainingPlanWorkout": { "count": 1, "next": {} } } } } } } ], paths = getPaths(data[0]); console.log(paths);
You have to call getPaths
function with the root object as argument. 您必须使用根对象作为参数来调用getPaths
函数。 In you case it would be like getPaths(data[0]);
在您的情况下,就像getPaths(data[0]);
and result will be an array of all paths. 结果将是所有路径的数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.