如何检查JavaScript中是否存在嵌套的JSON属性和值



我得到的JSON下面是API响应。响应包含多个会话节点,每个会话节点包含多个事件节点。我想确定第一个";搜索";事件("类型"(。如果";搜索";事件,然后,从特定事件中,我需要得到";利息";节点值。

var guestJson = await response.json(); 
for(var property in guestJson)
{                    
if(property === "sessions")
{                         
var sessionObj = JSON.parse(JSON.stringify(guestJson[property]))
for(var i=0; i< sessionObj.length; i++)
{   
var eachSessionObj = JSON.parse(JSON.stringify(sessionObj[i]))  

for(var sessionProperty in eachSessionObj)                
{                                   
if(sessionProperty === "events")
{
console.log("Events Found")
//console.log(sessionProperty)
}
}                              
}
}                  
}

我可以做如下循环。但我认为这不是进行的有效方法

下面是JSON结构

{
"firstName":"fn",
"lastName":"ln",
"gender":"male",
"sessions":[
{
"currency":"USD",
"events":[
{
"type":"SEARCH",
"status":"PROCESSED",
"arbitraryData":{
"interest":"Health"
}
},
{
"type":"CHECK",
"status":"PROCESSED",
"arbitraryData":{
"interest":"Dental"
}
}
]
},
{
"currency":"USD",
"events":[
{
"type":"SEARCH",
"status":"PROCESSED",
"arbitraryData":{
"interest":"Health"
}
},
{
"type":"CHECK",
"status":"PROCESSED",
"arbitraryData":{
"interest":"Dental"
}
}
]
}

]}

您可以尝试这样的函数:

function extractInterest(guestJson) {
// Get all sessions or else get an empty array
const sessions = guestJson.sessions || [];
// Filter all sessions with events
const interest = sessions.filter(session => session.events)
.flatMap(session => session.events) // Maps all the events to a single list
.filter(event => event.type === "SEARCH") // Filter only the events with type "SEARCH"
.map(event => event.arbitraryData.interest); // Extract the interest from each event
return interest; // return the list of interests
}

当应用于示例JSON时,它会返回一个兴趣数组,如下所示:

[ 'Health', 'Health' ]

最新更新