我正在从我们的一家供应商的API下载数据。数据是一个数组,但是某些字段为空,以undefined
的形式出现。我能够通过循环获取大部分信息,但是当我添加字段“ notes”时,它会失败并显示以下错误:
”元素注释在作为表达式一部分引用的CFML结构中未定义。包含或处理的文件的特定顺序为:
C:\ websites \ Fire \ Reports \ xml_parse \ Crewsense_payroll_loop.cfm,行: 21“
当我查看转储时,我看到该字段显示为“未定义”。我的想法已经用完了。任何帮助将不胜感激。我已经包含了整个代码和指向显示数组的转储的链接。
<cfhttp url="https://api.crewsense.com/v1/payroll? access_token=as;lkdfj;alskdfj;laksdfj&token_type=bearer&start=2019-01-05%2019:00:00&end=2019-01-06%2007:59:00" method="GET" resolveurl="YES" result="result">
</cfhttp>
<cfoutput>
<cfset ApiData = deserializeJSON(result.filecontent)>
<cfset API_ArrayLength = arraylen(ApiData)>
<cfloop index="i" from="1" to=#API_ArrayLength#>
#i# #ApiData[i]["name"]#
#ApiData[i]["employee_id"]#
#ApiData[i]["start"]#
#ApiData[i]["end"]#
#ApiData[i]["total_hours"]#
#ApiData[i]["work_type"]#
#ApiData[i]["work_code"]#
#ApiData[i]["user_id"]#
#ApiData[i]["notes"]# <---Fails here when added--->
<cfset i = i+1>
<br>
</cfloop>
<cfdump var="#ApiData#">
</cfoutput>
答案 0 :(得分:3)
在处理具有可选元素的数据结构时,您需要先检查它们的存在,然后再尝试访问它们。否则,您将得到该错误。我使用structKeyExists()函数为您的代码添加了一个带有SELECT YEAR(StrDate) StrYear,
MONTH(StrDate) StrMonth,
DAY(StrDate) StrDay
FROM (
SELECT TRY_CAST(StrDate AS DATE) StrDate
FROM Dates
)T
条件的代码段。
if