4

我正在尝试对调用 Facebook 的结果进行一些清理,但 Coldfusion 告诉我该变量为空:

FILECONTENT null <br>The error occurred on line 66.

这是导致错误的行:

<cfif isDefined("storeFeedJSON.fileContent")>
    <cfset storeFeedJSON.fileContent = process.CleanBadUnicode("#storeFeedJSON.fileContent#")>
</cfif>

该结构显然不是空的,但是因为我将它包裹在“isDefined”中,当我转储 storeFeedJSON 时,我可以看到 fileContent 看起来像

{"data":[]}

空 JSON 但仍不为空...

编辑:这是我忘记打的电话:

<cfset fbURL = "https://graph.facebook.com/#qStoreFBPages.pageID#/#fbEdge#?fields=#fbFields#&since=#fbSinceTime#&#qToken.objectValue#">
    <cfhttp result="storeFeedJSON" url="#fbURL#" method="get"></cfhttp>

这可能最终看起来像这样:

<cfhttp result="storeFeedJSON" url="https://graph.facebook.com/1749383765/posts?fields=created_time&since=1389296713&access_token=CAAH6oehQqUUU2IALvt0ZB3mdE6E2LCaldFc1TjIqxALUZBMqZC01O2hQXkOX8ROI9QBHn7WjWrHHneazAP4gWbj0MBsRUlel9TAG52kjBm0bBOUHVEFmEusEUHfhznlqzH1GMgCpCU4z4SmgXU8oFZBPDyAv1ByJu167jgkVd6UROWtDZBNBCP&expires=5184000" method="get"></cfhttp>

请注意,这不会导致来自 Facebook 的有效响应,因为我已经更改了我的令牌和其他一些参数。

4

1 回答 1

3

我认为您不能重新分配 storeFeedJSON 结构的属性。storeFeedJSON 是您的 cfhttp 的结果,对吧?如在

<cfhttp url="xyz" result="storeFeedJSON">

...我认为这是一种受保护或不可变的数据结构。您显然可以将它作为函数的参数传递,但将输出放在其他变量中,或者直接传递给 json 反序列化。

<cfset local.cleanFileContent = process.CleanBadUnicode(storeFeedJSON.fileContent)>
<cfdump var="#deserializeJSON(local.cleanFileContent)#">

...当我在做的时候,你可能想要使用getasbinary="never",因为 Facebook 有一天可能会给你二进制数据,或者改变它的标题或其他东西,然后你的代码就会中断。如果您必须接收二进制文件,您将需要cfhttp.fileContent.toString()或类似的东西。

于 2014-02-17T20:56:19.250 回答