2013-04-07 103 views
1

我正在構建iOS應用程序,並且正在使用RestKit v0.20來映射JSON文件。 JSON文件結構是下一個:在iOS中使用RestKit解析JSON失敗

{ 
"artists":{ 
    "@total":"100", 
    "@page":"1", 
    "@itemsPerPage":"30", 
    "artist":[ 
    { 
    "@sortName":"Ai Phoenix", 
    "@name":"Ai Phoenix", 
    "@mbid":"ffb0ac71-a438-4fce-91a5-58041aba0135", 
    "url":"http:\/\/www.setlist.fm\/setlists\/ai-phoenix-13d78159.html" 
    }, 
    { 
    "@sortName":"Phoenix", 
    "@name":"Phoenix", 
    "@mbid":"02f4c1ff-65e0-4412-8e8b-6239b0faecb5", 
    "url":"http:\/\/www.setlist.fm\/setlists\/phoenix-53d653f9.html" 
    } 
    ] 
} 

我不知道如何將這些屬性具有前綴地圖「@」(@sortname,@name,@mbid)。我嘗試將其映射爲普通字段(@「@ name」,@「@ mbid」,...),並且失敗。另一方面,@「url」對於「url」字段運行良好。我已經搜索了,我得到的全部是這個符號是因爲從一個名爲Badgerfish的XML文件進行翻譯。

我這能幫助,已經得到了通訊員XML這個JSON文件:

<artists total="100" page="1" itemsPerPage="30"> 
    <artist sortName="Ai Phoenix" name="Ai Phoenix" mbid="ffb0ac71-a438-4fce-91a5- 58041aba0135"> 
    <url> 
     http://www.setlist.fm/setlists/ai-phoenix-13d78159.html 
    </url> 
</artist> 

如果有人能幫助我,我將不勝感激。謝謝大家!

回答

2

這是RestKit的known limitation

引用框架的作者自己:

這是一個已知的限制,RestKit對 Cocoa的鍵 - 值屬性訪問編碼系統依賴的結果。 '@'前綴是 ,用於計算鍵值收集操作符。

你將需要更改JSON格式有效地與RestKit工作

+0

謝謝Gabriele!我想我嘗試使用XML替代。也許我錯了,但我讀過RestKit只支持json,我不得不添加一個庫來解析它。我在SO RKXMLReaderSerialization中找到了。 – 2013-04-07 19:48:30

0

據我所知RESTKit使用KVC,而@被KVC使用,所以不能在JSON鍵名中使用它。嘗試檢查是否可以使用其他內容更改@前綴,例如「m_」。

+0

謝謝安德烈!正如我對Gabriele所說的,我將使用RKXMLReaderSerialization嘗試XML文件而不是JSON。 – 2013-04-07 19:49:37

+1

我是我的意見使用XML是一種退後一步,我喜歡JSON的同步有效載荷。如果你覺得舒適,你可以做你自己的「RestKit」,不會有問題。或者嘗試預先詳細說明刪除@與另一個字符的字符串 – Andrea 2013-04-07 20:45:20

+0

我將嘗試刪除@字符並映射文件。謝謝安德烈! – 2013-04-08 00:07:22

0

如果你不使用映射另一種方法是創建一個私有RestKit分支和使用objectForKey關鍵路徑:和親屬而不是valueForKey :.在iOS應用程序中,您必須隨身攜帶您自己的RestKit副本。 (這是爲我的簡單的應用程序,它的工作到目前爲止)

+0

謝謝!我終於決定使用Apple的NSJSONSerialization,它的工作原理非常完美!我將在未來給RestKit一個機會。 – 2013-10-28 20:57:28