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

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

星期三,9月22日,2010年下午7:04

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

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

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

问题在于YQL JSON公司结果

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

从geo.places中选择*,其中text=“London”以下内容:

多位置XML输出

如果你使用JSON公司当输出格式为数组时,以下内容:

多位置JSON输出

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

从geo.places中选择*,其中text=“London,UK”以下内容:

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

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

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

其他
$O=渲染($P);
_

返回$o;
_

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

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

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

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

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

你有解决办法吗?

标签:,请,请,请

在Twitter上分享