2011-05-10 85 views
1

我們將JSON輸出添加到輸出XML的現有API,以使MobileHTML集成更加容易。但是,我們的開發人員查詢了JSON輸出中出現的@attributes的使用。在JSON非標準或標準中使用@attributes?

我們原來的XML看起來像:

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

等等JSON出來爲:

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

我們的開發者表示:

「雖然 '@屬性' 是合法的JSON,它似乎打破點符號,所以我不能調用數據。@屬性。我可以調用數據['@屬性'],所以有一個解決方法,但它似乎更安全避免使用@ -symbol,除非有充分的理由。「

的XML-> JSON(P)轉換完成後使用:

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

我想使我們的API作爲易於集成成爲可能,因此,儘可能使用標準的東西。但是我們使用了原生的PHP json_encode函數,所以如果它做的是非標準的東西,我會感到很驚訝。

是否使用@attributes非標準?這基本上只是我們的API在使用<marker id..>而不是<marker><id>方面有點缺陷的問題?

回答

3

JSON standard只指定什麼是和無效;它沒有設定慣例。使用無效的JavaScript標識符的屬性名稱沒有任何內在的錯誤。

然而,正如你的開發人員指出的那樣,這使得在JS中使用結果稍微尷尬,因爲它使得不可能使用點符號。 On the gripping hand,使用簡單內容的屬性通常被視爲「良好的XML」,並且您正在使用默認的內置工具將XML轉換爲JSON。我傾向於認爲有足夠的理由讓它保持原樣。

如果是我,我會考慮實現一個自定義的XML - > JSON轉換器是多麼困難。如果它簡單明瞭,那就走這條路線,並避免@attribute(它也可能使你的JSON變得更小更簡單)。然而,如果它太麻煩了,錯誤地使用點符號並不是世界的盡頭。最壞的情況下,var attr = data.marker["@attributes"];將解決此問題。

+2

'simplexml_load_string'函數非常*必須爲XML屬性使用無效的標識符。它選擇的任何有效的Javascript標識符也將是一個有效的XML元素名稱,因此可能在XML中遇到它正在轉化爲Javascript對象。該功能需要將這些屬性分組到不會干擾子元素的地方。 – 2011-05-10 23:09:53

+0

@Rob - 極好的一點,忘了提。這就是爲什麼自定義轉換器可以解決這個問題(您可以手動選擇不衝突的名稱),但通用轉換器不能。 – 2011-05-10 23:23:09