首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSONModel和OData

JSONModel和OData
EN

Stack Overflow用户
提问于 2013-08-08 22:52:00
回答 2查看 590关注 0票数 3

我们目前正在为我们的iOS应用评估JSONModel,并且到目前为止都非常喜欢它。问题是,我们必须处理一个OData应用程序接口,它往往会在几个地方使事情变得过于复杂。例如,当返回一个实体列表时,我能想到的所有API都会返回如下所示的简单内容:

代码语言:javascript
复制
{
  items: [
    { id => 123, name => 'foo' },
    { id => 124, name => 'bar' },
    { id => 125, name => 'baz' },
  ]
}

不幸的是,OData给了我更多这样的东西:

代码语言:javascript
复制
{
  d: {
    results: [
      { Item => { id => 123, name => 'foo' } },
      { Item => { id => 124, name => 'bar' } },
      { Item => { id => 125, name => 'baz' } },
    ]
  }
}

"d“是我最小的问题(因为我们可以把它解析掉)。但是我不知道如何处理这样一个事实,即列表中的每一项都被包装在一个以该项的类型为键的散列中,因此通过NSArray的JSONModel关系不起作用。我可以像这样为我的项目定义JSONKeyMapper:

代码语言:javascript
复制
@"Item.id"   : @"id",
@"Item.name" : @"name"

但是,当有多个项时,OData标准只将项包装在它们自己的散列结构中。例如,当仅从OData应用程序接口获取单个项时,我得到(正如预期的):

代码语言:javascript
复制
{
  d: {
    results: {
      id => 123, 
      name => 'foo'
    }
  }
}

:-(

对如何处理这个问题有什么想法吗?在任何人建议两个主要的OData iOS客户端之一之前:不幸的是,这两个客户端似乎都相当不受支持和/或过时,包括微软列出的官方客户端。

EN

回答 2

Stack Overflow用户

发布于 2013-08-09 01:26:04

一个FYI可能会回答你的问题:

您发布的JSON是OData的旧JSON格式(现在通常称为"JSON Verbose")。事实上,当OData被OASIS正式标准化时,它将完全消失。

我们替换这种旧格式的部分原因正是您在这里遇到的:它很难使用。

如果您正在与之交谈的应用程序服务支持OData协议的版本3,那么请求“OData / JSON”应该返回新的JSON格式。您可以更明确地要求"application/json;odata=minimalmetadata“。新的JSON格式没有任何"d“包装器,其结构类似于问题开头所期望的JSON。

如果您正在与之交谈的服务不支持V3,并且您无法自己控制该服务,那么我将把它留给其他人来帮助解决您需要解决的Objective-C问题。如果您确实控制了服务(或者可以纠缠这样做的人),我建议您更新服务以支持V3。

票数 1
EN

Stack Overflow用户

发布于 2013-09-20 03:13:58

在理解OAuth为什么要做你所描述的事情时,我不会涉及太多细节,以下是我将如何处理这一问题。

  1. 将"results“设置为可选属性。
  2. 添加一个访问器方法(比方说) "resultsBetter“在模型类上模拟一个新的只读属性
  3. 创建一个-(id)resultsBetter方法第一次访问该方法时检查"results”值的类型并返回一个与1个结果匹配的JSONModel实例,或者一个包含更多JSONModel实例的数组(或者,如果只需要数组中的第一个,则也只能返回1个对象) ...

无论如何,我的观点是,您不需要在一次操作中解析所有内容。您也可以在首次访问自定义访问器方法中的属性时执行此操作。或者,如果你真的想做一些时髦的设置,你也可以实现一个自定义的initWithDictionary:error: method,并在实例初始化的最后添加一些额外的逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18129203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档