2013-04-07 101 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