在JSON非标准或标准中使用@attributes?

时间:2011-05-10 22:46:58

标签: json attributes jsonp

我们将JSON输出添加到输出XML的现有API中,以使MobileHTML集成更加容易。但是,我们的开发人员查询了JSON输出中出现的@attributes的用法。

我们的原始XML看起来像:

<markers>
    <marker id="11906" latitude="52.226578"
    ...

所以JSON出现为:

callbackname({"marker":[{"@attributes":{"id":"11906","latitude":"52.226578"
....

我们的开发人员声明:

  

“尽管'@attributes'是合法的JSON,它似乎打破了点符号,所以我无法调用数据。@属性。我可以调用数据['@ attributes'],所以有一个解决方法,但似乎更安全,只是为了避免@ -symbol,除非有充分的理由。“

XML-&gt; JSON(P)转换使用:

完成
$xmlObject = simplexml_load_string ($data);
$data = json_encode ($xmlObject);

我想让我们的API尽可能易于集成,因此尽可能使用标准的东西。但我们正在使用原生的PHP json_encode函数,所以如果它做了非标准的事情,我会感到惊讶。

是否使用@attributes非标准?这基本上只是我们的API在使用<marker id..>而不是<marker><id>方面有点突破的问题吗?

1 个答案:

答案 0 :(得分:3)

JSON standard仅指定什么是无效的;它没有设定惯例。使用不是有效Javascript标识符的属性名称没有任何内在错误。

但是,正如您的开发人员指出的那样,这确实使得在JS中使用结果更加尴尬,因为它使得无法使用点表示法。 On the gripping hand,使用简单内容的属性通常被视为“好的XML”,并且您正在使用默认的内置工具将XML转换为JSON。我倾向于认为这是一个足够的理由让它保持原样。

如果是我,我会看看实现自定义XML有多难 - &gt; JSON转换器。如果它简单明了,那就走这条路并避免使用@attribute(它也可能使你的JSON更小更简单)。然而,如果它太麻烦,错过点符号并不是世界末日。在最坏的情况下,var attr = data.marker["@attributes"];会解决问题。