在Coldfusion中使用JSON数据

时间:2013-04-05 17:33:02

标签: json coldfusion

我过去曾使用过JSON数据 - 主要是“捏造”我的解决方案,而不是真正理解为什么或如何运作。我遇到的问题是,返回的数据看起来与我之前看到的有些不同,我找不到任何匹配它的例子。

以下是返回的数据示例(通过API);

{"domain.co.uk":{"status":"available","classkey":"thirdleveldotuk"},"domain.net":{"status":"available","classkey":"dotnet"},"domain.com":{"status":"available","classkey":"domcno"}}

在我的前端,我需要返回这样的内容 -

  • domain.co.uk - 可用
  • domain.net - 可用
  • domain.com - 可用

因为'domain.com'等值总是会改变,所以我不能像往常那样映射名称(尽管它总是返回3'行)

我已经检查了我拥有的每本CF书,并阅读了在线CF文档,但我完全不知道从哪里开始这个!

指针非常赞赏!

2 个答案:

答案 0 :(得分:8)

如果使用deserializeJSON(数据)运行此命令,您将看到最终只有具有嵌套结构的结构。因此,您可以遍历结构,获取密钥然后获取该密钥的状态。在JSON术语中,您的JSON对象具有嵌套对象。

<cfset data = deserializeJSON(apiData) />
<cfset formattedData = [] />
<cfset tmp = {} />

<cfloop collection=#data# item="domain">
    <cfset tmp.domain = domain />
    <cfset tmp.status = data[domain]["status"] />
    <cfset arrayAppend(formattedData,duplicate(tmp)) />
</cfloop>

<cfdump var=#formattedData# />

答案 1 :(得分:7)

(这真的是一个评论,但有点太长了......)

  

我过去曾使用过JSON数据 - 主要是“捏造”我的方式   解决方案,而不是真正理解为什么或如何工作

JSON字符串基本上只是两个对象的表示:

  • []
  • 表示的数组
  • {}
  • 表示的结构(或对象)

查看API字符串,大括号{}表示您正在处理结构:

     { "theKey": "theValue" }

在您的情况下,域名是结构key

    { "domain.co.uk": "theValue" }

.. value是一个嵌套结构,包含两个静态键:“status”和“classkey”

    { "theKey":  {"status":"available","classkey":"thirdleveldotuk"}  }

与任何结构一样,您可以使用for .. in循环动态迭代键,如果您更喜欢cfml,则可以使用集合循环。

     for (theKey in theStruct) {
         WriteDump( theKey ); // ie "domain.co.uk"
     }

然后在循环内部使用关联数组表示法来抓取value,即:

     theStatus = theStruct[ theKey ]["status"]; // "available"

     // ... OR
     theValue  = theStruct[ theKey ]; 
     theStatus = theValue.status;

这就是它的全部。您可以使用类似的逻辑来访问任何类型的嵌套结构。