gpt4 book ai didi

ios - JSONModel 和 OData

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:00 27 4
gpt4 key购买 nike

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

{
items: [
{ id => 123, name => 'foo' },
{ id => 124, name => 'bar' },
{ id => 125, name => 'baz' },
]
}

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

{
d: {
results: [
{ Item => { id => 123, name => 'foo' } },
{ Item => { id => 124, name => 'bar' } },
{ Item => { id => 125, name => 'baz' } },
]
}
}

“d”是我最不关心的问题(因为我们可以将其解析掉)。但我无法弄清楚如何处理列表中的每个项目都包装在以项目类型为键的散列中的事实,因此通过 NSArray 的 JSONModel 关系不起作用。我可能会像这样为我的项目定义 JSONKeyMapper:

@"Item.id"   : @"id",
@"Item.name" : @"name"

但 OData 标准仅在存在多个项目时将项目包装在自己的哈希结构中。例如,当仅从 OData API 获取单个项目时,我得到(如预期的那样):

{
d: {
results: {
id => 123,
name => 'foo'
}
}
}

:-(

关于如何处理这个问题有什么想法吗?在有人推荐两个主要的 OData iOS 客户端之一之前:不幸的是,它们似乎都不受支持和/或已过时,包括 Microsoft 列出的官方客户端。

最佳答案

可能会回答您的问题的 FYI:

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

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

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

如果您正在与之交谈的服务不支持 V3,并且您自己无法控制该服务,我会将其留给其他人来帮助您解决此问题所需的 Objective-C。如果您确实控制了服务(或者可以唠叨控制服务的人),我建议更新服务以支持 V3。

关于ios - JSONModel 和 OData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18129203/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com