JSONModel - 使用&实现KeyMapper

时间:2013-12-24 04:10:11

标签: ios objective-c json jsonmodel

我正在使用JSONModel作为返回JSON对象的基本应用程序。

以下是我要返回的数据示例:https://gist.github.com/ryancoughlin/8043604 - 专注于tide对象。

我正在尝试使用JSONModel JSONKeyMapper - 这里的文档(向下滚动到中间) - https://github.com/icanzilb/JSONModel/blob/master/README.md#magical-data-modelling-framework-for-json

我试图找出如何实现它。我知道它也需要类似的关键路径:


编辑:从我的断点开始:http://dl.dropbox.com/u/19301636/Screenshots/rzqv.png

这是json返回的内容:http://dl.dropbox.com/u/19301636/Screenshots/y5mt.png


TIDEMAPPER.M

#import "TideMapper.h"

@implementation TideMapper

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

@end

TIDEMAPPER.M

#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 - 我认为它不会返回数组。它只是一个位置的结果

在调用此方法时我很困惑。有没有人有使用这个JSONModel KeyMapper的经验?

由于

1 个答案:

答案 0 :(得分:0)

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

IE中。当你调用initWithDictionary(或initWithJSONString)时,你的模型类会将每个JSON键映射到一个类属性,但是你在KeyMapper中列出的键将执行以下操作:

  • 它将在您的JSON中获取tideSummaryStats.maxheight的值并将其存储在您的类模型的'maxheight'属性中
  • 它将采用tideSummaryStats的值。 JSON中的minheight并将其存储在类模型的“minheight”属性中
  • 等等。

再次 - 请注意,您的模型将在init时自动为您执行,并且所有其他JSON键将尝试映射到具有相应名称的属性。

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

http://www.touch-code-magazine.com/how-to-make-a-youtube-app-using-mgbox-and-jsonmodel/