【问题标题】:Coldfusion 8 JSON - convert return string to query objectColdfusion 8 JSON - 将返回字符串转换为查询对象
【发布时间】:2012-11-09 00:52:48
【问题描述】:

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

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

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

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

【问题讨论】:

  • 记住反斜杠意味着引号被转义。由于返回类型是普通的,听起来 API 认为这应该是传递给 JavaScript 的普通字符串,因此它采用 JSON 对象并将其“字符串化”,而不是将其保存在 JSON 中。

标签: json coldfusion coldfusion-8


【解决方案1】:

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

【讨论】:

  • 这就是我的假设 - 但是 deserializeJson 失败:"JSON parsing failure at character 1:'&lt;' in "[{\"city\":\"Adrian\",\"state\":\"MI\",\"school\":\"Adrian College\"}
  • 那么它可能不是有效的 JSON。 jsonlint.com 说什么?
  • character 1 不是 &lt; - 不确定那里发生了什么 - 但是,如果实际变量包含 "[{\"city\" 等,那么您似乎拥有的是一个包含 JSON 对象的 JSON 字符串- 即它已被双重编码。
  • 这很奇怪 - 如果我使用 Firebug 并使用返回的数据创建一个字符串,它会按预期工作。 &lt;cfset theString = '[{\"city\":\"Adrian\",\"state\":\"MI\",\"school\":\"Adrian College\"}}'/&gt;
  • jsonlint.com 在 \ 上给出了解析错误。如果我在“\”上进行替换,则验证正常。 CFHTTP 可以添加一些东西吗?我将它设置为result="httpResult",然后我对其进行替换。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 2020-05-27
      相关资源
      最近更新 更多