0

我在使用 JSON 函数与其他系统交互时相对较新,也许我只是在一个基本问题上放屁。

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

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

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

4

3 回答 3

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 作用域)。

于 2012-11-08T16:05:22.827 回答
0

听起来您需要使用该DeserializeJSON()方法。更多信息在这里

于 2012-11-08T16:02:50.913 回答
0

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

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

于 2012-11-08T16:52:48.673 回答