我们将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>
方面有点突破的问题吗?
答案 0 :(得分:3)
JSON standard仅指定什么是无效的;它没有设定惯例。使用不是有效Javascript标识符的属性名称没有任何内在错误。
但是,正如您的开发人员指出的那样,这确实使得在JS中使用结果更加尴尬,因为它使得无法使用点表示法。 On the gripping hand,使用简单内容的属性通常被视为“好的XML”,并且您正在使用默认的内置工具将XML转换为JSON。我倾向于认为这是一个足够的理由让它保持原样。
如果是我,我会看看实现自定义XML有多难 - &gt; JSON转换器。如果它简单明了,那就走这条路并避免使用@attribute
(它也可能使你的JSON更小更简单)。然而,如果它太麻烦,错过点符号并不是世界末日。在最坏的情况下,var attr = data.marker["@attributes"];
会解决问题。