【问题标题】:Is use of @attributes in JSON non-standard or standard?在 JSON 中使用 @attributes 是非标准的还是标准的?
【发布时间】:2011-05-11 07:00:04
【问题描述】:

我们正在将 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,但它似乎打破了点符号,所以我不能调用data.@attributes。我可以调用data['@attributes'],所以有一个解决方法,但似乎避免使用@-符号更安全,除非有充分的理由。”

XML->JSON(P) 转换使用:

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

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

@attributes 的使用是非标准的吗?这基本上只是我们的API在使用&lt;marker id..&gt;而不是&lt;marker&gt;&lt;id&gt;方面有点坏的问题吗?

【问题讨论】:

    标签: json attributes jsonp


    【解决方案1】:

    JSON standard 仅指定什么是有效的,什么是无效的;它没有设置约定。使用不是有效 Javascript 标识符的属性名称本身并没有错。

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

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

    【讨论】:

    • simplexml_load_string 函数几乎必须为 XML 属性使用无效标识符。它选择的任何有效 Javascript 标识符也将是有效的 XML 元素名称,因此可能会在它正在转换为 Javascript 对象的 XML 中遇到。该函数需要将属性分组到它们不会干扰子元素的地方。
    • @Rob — 好点,忘了提。这就是为什么自定义转换器可以解决这个问题(您可以手动选择不冲突的名称),但通用转换器却不能。
    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 2011-10-08
    • 2013-07-26
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    相关资源
    最近更新 更多