我过去曾使用JSON数据 - 主要是'捏造'我的解决方案,而不是真正理解为什么或如何工作.我遇到的问题是,返回的数据看起来与我之前看到的有些不同,我找不到任何与之匹配的示例.
这是返回的数据示例(通过API);
{"domain.co.uk":{"status":"available","classkey":"thirdleveldotuk"},"domain.net":{"status":"available","classkey":"dotnet"},"domain.com":{"status":"available","classkey":"domcno"}}
Run Code Online (Sandbox Code Playgroud)
在我的前端,我需要返回这样的东西 -
因为'domain.com'等值总是会改变,所以我不能像往常那样映射名称(虽然它总是返回3'行')
我已经检查了我拥有的每本CF书,并阅读了在线CF Docs,但我完全不知道从哪里开始这个!
指针非常感谢!
如果你使用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# />
Run Code Online (Sandbox Code Playgroud)
(这真的是一个评论,但有点太长了......)
我过去曾使用JSON数据 - 主要是"捏造"我的解决方案,而不是真正理解为什么或如何工作
JSON字符串基本上只是两个对象的表示:
[]和表示的数组{}查看API字符串,大括号{}表示您正在处理结构:
{ "theKey": "theValue" }
Run Code Online (Sandbox Code Playgroud)
在您的情况下,域名是结构key:
{ "domain.co.uk": "theValue" }
Run Code Online (Sandbox Code Playgroud)
..并且value是一个包含两个静态键的嵌套结构:"status"和"classkey"
{ "theKey": {"status":"available","classkey":"thirdleveldotuk"} }
Run Code Online (Sandbox Code Playgroud)
与任何结构一样,您可以使用for .. in循环动态迭代键,如果您更喜欢cfml,则可以使用集合循环.
for (theKey in theStruct) {
WriteDump( theKey ); // ie "domain.co.uk"
}
Run Code Online (Sandbox Code Playgroud)
然后在循环内部使用关联数组表示法来抓取value,即:
theStatus = theStruct[ theKey ]["status"]; // "available"
// ... OR
theValue = theStruct[ theKey ];
theStatus = theValue.status;
Run Code Online (Sandbox Code Playgroud)
这就是它的全部.您可以使用类似的逻辑来访问任何类型的嵌套结构.
| 归档时间: |
|
| 查看次数: |
6905 次 |
| 最近记录: |