我使用JSON函数与其他系统进行相对较新的交互,也许我只是在基本问题上大放异彩。
我访问一个API函数,该函数将查询作为JSON字符串返回。返回格式是“普通”。查询运行以选择学校列表并创建一个结构数组作为返回字符串。
"[{\"city\":\"Adrian\",\"state\":\"MI\",\"school\":\"Adrian College\"},{\"city\":\"Albion\",\"state\":\"MI\",\"school\":\"Albion College\"},.........etc.
所以现在我需要将其转换为查询对象并使用它,但现在我发现自己在google / test / re-google / re-test循环中四处走动。有关如何将其转换为以学校/城市/州为列的查询的任何指示?
答案 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”。
一旦我们将它们放到位,数据就会按预期返回。感谢大家的建议。