I need to create a query object out of an array of structures. The array has about 200 keys and the structures inside the array vary in name, size and depth. Here's what one node looks like:

I already have it working fine for array[#i].adGroupId and array[#i#].userStatus but I need to check if a structure value exists before adding it to the query. criterion.text for example isn't always in the structure so I need to check that, but not sure how. Here's the code so far but it always skips criterion.text and bids.maxCpc.amount.microAmount.
<cfset vColumns = "AdGroupID,KeywordText,Status,MaxCPC" />
<cfset vColumnValue = "AdGroupID,criterion.text,userStatus,bids.maxCPC" />
<cfset loopnum = 1>
<cfset myquery = QueryNew(vColumns) >
<cfloop array="#aKeywordsAll#" index="i">
<cfset temp = QueryAddRow(myquery, 1)>
<cfset loopNum2 = 1>
<cfloop list="#vColumnValue#" index="j">
<cfif structKeyExists(aKeywordsAll[loopnum],j)>
<cfset QuerySetCell(myquery, listGetAt(vColumns, loopNum2), aKeywordsAll[loopnum][j])>
<cfelse>
<cfset QuerySetCell(myquery, listGetAt(vColumns, loopNum2), "test")>
</cfif>
<cfset loopNum2++ />
</cfloop>
<cfset loopnum++ />
</cfloop>
Here's the query object created. It says "test" but hoping it would give the values:

aKeywordsAllarray look like? If that's an array how would it have a value ofaKeywordAll[1][1]?listgetati'd recommend creating an array an access it viaarray[loopNum2]