4

我过去使用过 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 文档,但我完全不知道从哪里开始!

非常感谢指点!

4

2 回答 2

10

如果你使用 deserializeJSON(data) 运行它,你会看到你最终得到的是带有嵌套结构的结构。因此,您可以遍历您的结构,获取键,然后获取该键的状态。在 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# />
于 2013-04-05T17:50:46.187 回答
8

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

我过去使用过 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;

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

于 2013-04-05T18:31:09.447 回答