Coldfusion 8 JSON - 将返回字符串转换为查询对象

时间:2012-11-08 15:57:13

标签: json coldfusion coldfusion-8

我使用JSON函数与其他系统进行相对较新的交互,也许我只是在基本问题上大放异彩。

我访问一个API函数,该函数将查询作为JSON字符串返回。返回格式是“普通”。查询运行以选择学校列表并创建一个结构数组作为返回字符串。

"[{\"city\":\"Adrian\",\"state\":\"MI\",\"school\":\"Adrian College\"},{\"city\":\"Albion\",\"state\":\"MI\",\"school\":\"Albion College\"},.........etc.

所以现在我需要将其转换为查询对象并使用它,但现在我发现自己在google / test / re-google / re-test循环中四处走动。有关如何将其转换为以学校/城市/州为列的查询的任何指示?

3 个答案:

答案 0 :(得分:2)

首先使用deserializeJson将字符串转换为可用的字符串。

然后,在第一个数组元素上使用StructKeyList以获取要在QueryNew中使用的列。

然后执行两个循环 - 一个通过执行QueryAddRow的数组,其中包含一个内部循环,通过QuerySetCell来设置值。


与此相符:

<cfset Data = deserializeJson(JsonString) />

<cfif NOT ArrayLen(Data)>
    <cfthrow message="No data" />
</cfif>

<cfset Q = QueryNew( StructKeyList(Data[1]) ) />

<cfloop index="i" array=#Data#>
    <cfset Row = QueryAddRow(Q) />
    <cfloop index="ColName" collection=#Data[i]# >
        <cfset QuerySetCell( Q , ColName , Data[i][ColName] , Row ) />
    </cfloop>
</cfloop>

<cfdump var=#Q# />

理想情况下将其置于函数内(这意味着适当地使用var作用域)。

答案 1 :(得分:0)

听起来你需要使用DeserializeJSON()方法。更多信息here

答案 2 :(得分:0)

解决!有一个第二个CFC代理了所有API请求并验证了API凭据。从该代理CFC和代理CFC扩展的所有API CFC都缺少returnformat =“plain”。

一旦我们将它们放到位,数据就会按预期返回。感谢大家的建议。