我已遵循此 Adobe Help/ DeserializeJSON文档,但它给了我错误,例如Error in custom script module或Element COLUMNS is undefined in CFDATA。任何帮助深表感谢。该错误来自 cfData。对 cfData 执行任何操作都会导致某种错误。不过,转储 cfData 效果很好。它显示了所有正确的数据。下面是我的代码:
<cfhttp url="http://api.openweathermap.org/data/2.5/weather?zip=55101,us&appid=44db6a862fba0b067b1930da0d769e98" method="get" >
<!--- JSON data is sometimes distributed as a JavaScript function.
The following REReplace functions strip the function wrapper. --->
<cfset theData=REReplace(cfhttp.FileContent, "^\s*[[:word:]]*\s*\(\s*","")>
<cfset theData=REReplace(theData, "\s*\)\s*$", "")>
<!---<cfdump var="#theData#" >--->
<!--- Test to make sure you have JSON data. --->
<cfif !IsJSON(theData)>
<h3>The URL you requested does not provide valid JSON</h3>
<!--- If the data is in JSON format, deserialize it. --->
<cfelse>
<cfset cfData=DeserializeJSON(theData)>
<cfdump var=#cfData# >
<cfset colList=ArrayToList(cfData.COLUMNS)>
<cfset weatherIdx=ListFind(colList, "weather")>
<cfset descriptionIdx=ListFind(colList, "description")>
<!--- Now iterate through the DATA array and display the data. --->
<cfoutput>
<cfloop index="i" from="1" to="#Arraylen(cfData.DATA)#">
<h3>Weather: #cfData[i][weatherIdx]#</h3>
<h4>Discription: #cfData[i][descriptionIdx]#</h4>
</cfloop>
</cfoutput>
</cfif>
Run Code Online (Sandbox Code Playgroud)
查看您的转储,deserializeJSON 的结果是一个结构,而不是查询。您可以在使用该函数时测试一下是否weather存在。下面的代码对我来说没有错误:cfDatastructKeyExists()
<cfhttp url="http://api.openweathermap.org/data/2.5/weather?zip=55101,us&appid=44db6a862fba0b067b1930da0d769e98" method="get" >
<!--- JSON data is sometimes distributed as a JavaScript function.
The following REReplace functions strip the function wrapper. --->
<cfset theData=REReplace(cfhttp.FileContent, "^\s*[[:word:]]*\s*\(\s*","")>
<cfset theData=REReplace(theData, "\s*\)\s*$", "")>
<!---<cfdump var="#theData#" >--->
<!--- Test to make sure you have JSON data. --->
<cfif !IsJSON(theData)>
<h3>The URL you requested does not provide valid JSON</h3>
<!--- If the data is in JSON format, deserialize it. --->
<cfelse>
<cfset cfData=DeserializeJSON(theData)>
<cfdump var=#cfData# >
<cfif structKeyExists( cfData, 'weather' ) AND isArray(cfData.weather)>
<cfoutput>
<cfloop index="i" from="1" to="#arrayLen(cfData.weather)#">
<h3>Weather: #cfData.weather[i].main#</h3>
<h4>Description: #cfData.weather[i].description#</h4>
</cfloop>
</cfoutput>
</cfif>
</cfif>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9129 次 |
| 最近记录: |