必威体育下载克里斯蒂安·海尔曼

贴有“json”标签的帖子

YQL的JSON输出的恼人之处及其原因

星期三,9月22日,二千零一十

几天前,西蒙·威利森在Twitter上发泄了一件令我恼火的事YQL公司,也是:

与YQL的JSON输出作斗争,其中一个结果的响应与两个结果的响应完全不同

有趣的是它不是betway体育官方网YQL公司bug——相反,它只是通用代码和数据转换的问题。

问题在于YQL JSON结果

让我们举个例子。如果你使用YQL公司例如,获取有关“伦敦”的地理信息你得到了几个结果XML

从geo.places中选择*,其中text=“London”

多位置XML输出

如果你使用杰森当输出格式为数组时,

多位置JSON输出

酷,所以你可以绕过去query.results.place查询.results.place,正确的?不,因为当只有一个结果时,我们有不同的情况。不是数组,地方变成了一个物体

从geo.places中选择*,其中text=“London,UK”

JSON中的单个结果变为对象而不是数组

这就是让西蒙苦恼的原因,因为这意味着你需要编写一个解决这个问题的函数。例如,在地质公园探索者中,我用Read()函数来显示每个位置的结果,我使用以下内容来处理杰森输出问题:

函数呈现列表($P)
如果(sizeof($p)>1)
foreach($p为$p p)
$o.=渲染($pp);
}

}否则{
$O=渲染($P);
}

返回美元;
}

在JavaScript中,您必须检查长度,直接显示结果或循环显示结果。

通用转换与创建单个美国石油学会

转换时出现问题XML杰森-作为结果XML来自地质公园美国石油学会没有包含place的place元素,而是为每个结果重复place元素杰森解析器必须做出决定:如果它只是一个元素,这将成为结果对象的属性。如果有多个place元素,它将成为一个数组属性(因为不能重复相同的属性名)。

如果你建立自己的美国石油学会你知道不同结果的格式,即使只有一个结果,你也可以强制它成为一个数组。如果你不知道XML模式不能假设什么应该是数组,什么不应该是数组。所以一般的解决方案XML杰森未知的转换XML使用1到n的结果将始终创建一个数组。这样你就无法到达place.admin1.代码例如,但你总是必须这样做位置[0].admin1[0].代码[0]–这真的不是明智之举。

ASYQL公司是一个开放的系统XML结果是由开放表定义中的任何人提供的,我能想到的唯一方法是YQL公司在表中,某些元素应始终强制成为数组。

你有解决办法吗?

stackoverflow devdays–我的“幻灯片平台”

星期三,10月28日,二千零九

我要去伦敦斯塔克瓦洛夫德维,演讲者被要求将幻灯片至少保留两页,然后显示代码。现在,以下是今天结束时我演讲的幻灯片:

演示文稿=
介绍:哦,海,
材料:{
类型:“棒极了”,
获胜:{
状态:“满”
}
前端:{
悠悠:['grids'、'widgets'、'frontloading'、'tools']
}
性能:{
Y流:“Showcase”
}
WEB:{
类型:“数据”,
工具:{
YQL公司:['select'、'mix'、'insert'、'extend'、'store']
}

}
平台:{
雅普:[“技术”、“演示”、“托管”]
}

}
问题:“有吗?”
};

我会添加越来越多的书签伦敦StackOverflowLondon的美味标签在演讲时,所以你可以看看我会在那里展示什么。

如果没有牢固的互联网连接,我得即兴发挥。

TTMMHTM:福音传道者手册,广告牌图表API,协同编辑,IE6抨击,漂亮的JSON,美味的快餐和可怕的虫子。

星期五,7月24日,二千零九

今天早上让我开心的事

另一个有趣的YQL特性:带回调的XML(JSON-P-X)

星期四,7月9日,二千零九

昨天的公告YQL公司现在支持插入,更新和删除不知何故,它掩盖了另一个有趣的新特性:XML回调!

XML有回调吗?

第一眼看到回调参数XML输出没有任何意义。回调的正常用例是杰森数据进入杰森-p以便您可以立即在javascript中使用数据。原因XML使用回调可以使从Web获取数据时更容易地使用相同的数据。说我想用YQL公司从Twitter上获取我关注的人的图片和链接。这个YQL公司声明如下:

从HTML中选择“*”,其中url=“http://twitter.com/codepo8”
和xpath=“//div[@id='following_list']

这个XML输出这个电话很重XML记录所有HTML作为一个XML节点结构。

这个杰森(和)杰森-P输出)甚至更糟,因为它为您提供了所有元素的结构及其作为嵌套对象属性的属性:

div:{
id:“跟踪列表”
斯潘:
{

答:{
HREF:“/jemimaskiss”
HeSurang:“EN”
rel:“联系人”
标题:“杰米玛之吻”
IMG:{
alt:“杰米玛之吻”
身高:“24”
SRC:“http://s3.amazonaws.c…glasto_mini.jpg”网站
宽度:“24”
}

}
}

/…等等…

将此转换回HTML这可能是一项很烦人的工作,更不用说慢了。这就是为什么YQL公司现在提供回调参数XML.这个JSONP-X输出正如它所说的YQL公司长乐阁通过返回杰森对象与XML作为字符串:

FO({)
“查询”:{
计数
更新的
“诊断”:
可公开发布
“URL”:{
执行时间
内容
}
用户时间
}

}
“结果”:

记者杰迈玛·凯丝[…]

]

(});

这使得将结果呈现为HTML


好吗?我认为是这样!

更安全的JSON-P?Bing API的一个有趣特性

星期一,6月15日,二千零九

我只是看了一下美国石油学会微软新的必应搜索(这实际上是对Live Search的重新品牌化——同时,切换到“低带宽视图”以便更顺利地使用文档),我发现了一个有趣的步骤,可以防止代码抛出错误。

当你提供杰森对于开发人员来说,允许回调参数也是有意义的。这样,您的代码就可以在脚本节点中使用,而不必使用任何后端。例如,如果您提供美国石油学会要返回披头士乐队的名字,您可以使用类似的数据端点盖茨披头士乐队以及输出格式的参数:

http://example.com/api/getbeatles?输出= JSON

然后返回数据将是:

{
“成员”:
[

“保罗”:{…更多信息…,
“林戈”:{…更多信息…,
“约翰”:{…更多信息…,
“乔治”:……更多信息…}
]

}

在没有黑客的情况下,我不能在javascript中使用它。我需要撤离(或是为了安全)杰森解析)结果,使用传统的Ajax,我无法访问域外的数据。使杰森尽可能简单地工作,您可以提供一个回调参数。

http://example.com/api/getbeatles?输出=json&callback=eleanorigby

这应该将代码包装在一个函数调用中,这意味着已经对输出进行了评估,用户必须定义一个回调方法来读取该信息。输出将是:

EelaRoRigBy({)
“成员”:
[

“保罗”:{…更多信息…,
“林戈”:{…更多信息…,
“约翰”:{…更多信息…,
“乔治”:……更多信息…}
]

(});

如果我定义一个函数埃莉诺里格比(O) o将是从数据返回的对象,我可以立即使用它:


现在的问题是如果埃莉诺里格比未定义它会引发错误。

冰兵美国石油学会第一个例子是,我看到他们在解决这个问题,因为输出是这样的:


if(eleanorrigby'函数的类型')eleanorrigby(
{

“搜索响应”:
{

版本
“查询”:
{

检索词艰难的白昼之夜”
}
“翻译”:
{

“结果”:
[

{翻译术语哈顿标签
]

}
}

/*页面视图_候选项*/);

我不知道什么/*pageview_候选人*/是关于和皱眉忽略了{}如果语句,但我必须说我喜欢这样。

现在的问题是错误是无声的,这可能会让调试很痛苦。也许更好的选择是有一个错误案例,美国石油学会在未定义回调时向控制台写出错误:

if(typeof callback='函数')
回调(…)数据……;
}否则{
如果(控制台类型!=='未定义'&&
console.log的类型!=='未定义')
console.log('错误:未定义回调方法');
}

}

总之,这是一个有趣的方法!