我过去曾使用过JSON数据 - 主要是“捏造”我的解决方案,而不是真正理解为什么或如何运作。我遇到的问题是,返回的数据看起来与我之前看到的有些不同,我找不到任何匹配它的例子。
以下是返回的数据示例(通过API);
{"domain.co.uk":{"status":"available","classkey":"thirdleveldotuk"},"domain.net":{"status":"available","classkey":"dotnet"},"domain.com":{"status":"available","classkey":"domcno"}}
在我的前端,我需要返回这样的内容 -
因为'domain.com'等值总是会改变,所以我不能像往常那样映射名称(尽管它总是返回3'行)
我已经检查了我拥有的每本CF书,并阅读了在线CF文档,但我完全不知道从哪里开始这个!
指针非常赞赏!
答案 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;
这就是它的全部。您可以使用类似的逻辑来访问任何类型的嵌套结构。