Ios JSONModel-使用&;实现键映射器

Ios JSONModel-使用&;实现键映射器,ios,objective-c,json,jsonmodel,Ios,Objective C,Json,Jsonmodel,我将JSONModel用于返回JSON对象的基本应用程序 下面是我返回的数据示例:-关注tide对象 我正在尝试使用JSONModelJSONKeyMapper——这里的文档(向下滚动到中间)—— 我正试图找出如何实施它。我知道它也采取了类似的关键路径: 编辑:从我的断点: 这是json返回的结果: TIDEMAPPER.M #import "TideMapper.h" @implementation TideMapper +(JSONKeyMapper*)keyMapper {

我将JSONModel用于返回JSON对象的基本应用程序

下面是我返回的数据示例:-关注
tide
对象

我正在尝试使用JSONModel
JSONKeyMapper
——这里的文档(向下滚动到中间)——

我正试图找出如何实施它。我知道它也采取了类似的关键路径:


编辑:从我的断点:

这是
json
返回的结果:


TIDEMAPPER.M

#import "TideMapper.h"

@implementation TideMapper

+(JSONKeyMapper*)keyMapper
{
    return [[JSONKeyMapper alloc] initWithDictionary:@{
                                                       @"tide.tideInfo": @"tideSite",
                                                       @"tide.tideSummaryStats": @"maxheight",
                                                       }];
}

@end
#import "TideMapper.h"

@implementation TideMapper

+(JSONKeyMapper*)keyMapper
{
    return [[JSONKeyMapper alloc] initWithDictionary:@{
                                                       @"tideSummaryStats.maxheight": @"maxheight",
                                                       @"tideSummaryStats.minheight": @"minheight",
                                                       @"tideInfo.lat": @"lat",
                                                       @"tideInfo.lon": @"lon"
                                                       }];
}

@end
TIDEMAPPER.M

#import "TideMapper.h"

@implementation TideMapper

+(JSONKeyMapper*)keyMapper
{
    return [[JSONKeyMapper alloc] initWithDictionary:@{
                                                       @"tide.tideInfo": @"tideSite",
                                                       @"tide.tideSummaryStats": @"maxheight",
                                                       }];
}

@end
#import "TideMapper.h"

@implementation TideMapper

+(JSONKeyMapper*)keyMapper
{
    return [[JSONKeyMapper alloc] initWithDictionary:@{
                                                       @"tideSummaryStats.maxheight": @"maxheight",
                                                       @"tideSummaryStats.minheight": @"minheight",
                                                       @"tideInfo.lat": @"lat",
                                                       @"tideInfo.lon": @"lon"
                                                       }];
}

@end
查看

@implementation TideDetailViewController

- (void)viewDidAppear:(BOOL)animated {

    [super viewDidAppear:YES];

    NSString *locationQueryURL = @"http://api.wunderground.com/api/xxxx/tide/geolookup/q/43.5263,-70.4975.json";

    [JSONHTTPClient getJSONFromURLWithString: locationQueryURL
                                  completion:^(NSDictionary *json, JSONModelError *err) {

//                                      NSArray* results = [json valueForKeyPath:@"tide.tideInfo"];

                                      _tide = [TideMapper arrayOfDictionariesFromModels:json];
                                       NSLog(@"loans: %@", _tide);

                                  }];
}
我想我需要将
tide
更改为
NSDictionary
——我认为它不会返回数组。这只是一个位置的单一结果

在调用此方法时,我被卡住了。有人有使用这个JSONModelKeyMapper的经验吗


谢谢

您自己不需要调用此方法。模型类在加载时调用它一次,并获取字典映射,并在每次初始化模型副本时使用它

例如,当您调用initWithDictionary(或initWithJSONString)时,您的模型类将把每个JSON键映射到一个类属性,但是对于您在KeyMapper中列出的键,将执行以下操作:

  • 它将获取JSON中的tideSummaryStats.maxheight值,并将其存储在类模型的“maxheight”属性中
  • 它将采用tideSummaryStats的值。并将其存储在类模型的“minheight”属性中
  • 等等等等
再次-请注意,您的模型将在init时自动为您执行该操作,并且它将尝试映射到具有相应名称的属性的所有其他JSON键

如果您有10分钟的空闲时间,您可以阅读本教程,其中展示了使用自定义密钥映射器和YouTube的JSON API:


您的字典无效--不能有同一键值的多个副本。只需更新代码,不完整的示例。更新了我的键值。道歉。想法?你能把你的模型结构贴出来吗?你是如何定义它们的?@JanakNirmal刚刚添加到我的模型中structure@JanakNirmal有空的时候,我用我的模型和代码更新了我的问题。好的,谢谢,我猜它会映射到定义的每个属性。我学习了YT教程和Kiva feed教程。我特别查看了您发布的YT教程,以了解关键映射器是如何工作的。如果我这样设置,我会通过
tide.maxheight
访问它们吗如果
arrayOfModelsFromDictionaries
接受一个
NSArray
,我需要从返回的JSON(在我的问题中发布)传递一个
NSDictionary
。我不能用那种方法。对吗?arrayOfModelsFromDictionaries接受一个NSArray参数,为什么要传递一个NSDictionary?我应该重写。我想看看是否有可能将我的字典转换为数组传递到
ArrayOfModelsFromDictionares
——然后我就可以基于它构建我的模型了。因为我的第一级
tide
不返回数组。我认为
keyMapper
非常合适,因为它可以帮助我挑选和匹配需要从JSON中提取的项目。我认为这是不可能的