【问题标题】:JSON parsing in iOS with RestKit fails在 iOS 中使用 RestKit 解析 JSON 失败
【发布时间】:2013-03-29 15:58:35
【问题描述】:

我正在构建一个 iOS 应用程序,并且我正在使用 RestKit v0.20 来映射 JSON 文件。 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 文件的翻译。

这对我有帮助,已经得到了这个 JSON 文件的对应 XML:

<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>

如果有人可以帮助我,我将不胜感激。谢谢大家!

【问题讨论】:

    标签: ios xml json mapping restkit


    【解决方案1】:

    这是 RestKit 的 known limitation。

    引用框架作者本人的话:

    这是一个已知的限制,也是 RestKit 依赖于 Cocoa 用于属性访问的键值编码系统。 '@' 前缀是 保留用于命名键值集合运算符。

    您需要更改 JSON 格式才能有效工作 使用 RestKit

    【讨论】:

    • 谢谢加布里埃尔!我想我尝试使用 XML 替代方案。也许我错了,但我读过 RestKit 只支持 json,我必须添加一个库来解析它。我在 SO RKXMLReaderSerialization 中找到了。
    【解决方案2】:

    据我所知,RESTKit 使用 KVC,而 @ 被 KVC 使用,因此不能在 JSON 键名中使用它。尝试检查是否可以将@前缀更改为其他内容,例如“m_”。

    【讨论】:

    • 谢谢安德里亚!正如我对 Gabriele 所说,我将使用 RKXMLReaderSerialization 尝试使用 XML 文件而不是 JSON。
    • 我认为使用 XML 是一种退步,我喜欢 JSON 的合成负载。如果你觉得舒服,你可以做你自己的“RestKit”,不会有问题。或者尝试使用另一个字符预先详细说明删除 @ 的字符串
    • 我将尝试删除 @ 字符并映射文件。谢谢安德里亚!
    【解决方案3】:

    如果您不使用键路径进行映射,另一种选择可能是创建私有 RestKit 分支并使用 objectForKey: 和 relatives 而不是 valueForKey:。在 iOS 应用程序中,无论如何您都必须发布自己的 RestKit 副本。 (为我的简单应用程序做了这个,到目前为止它工作正常)

    【讨论】:

    • 谢谢!我终于决定使用 Apple 的 NSJSONSerialization,而且效果很好!以后我会给 RestKit 一个机会。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    相关资源
    最近更新 更多