gpt4 book ai didi

ios - 将 JSON 字符串解析为基于 iOS 类的对象

转载 作者:行者123 更新时间:2023-11-29 12:57:18 25 4
gpt4 key购买 nike

我想使用特定类将 json 字符串映射到匿名对象。假设我有一个国家级。我想在不知道它是哪个对象的情况下将一个 json 字符串解析到这个对象中。所以我使用该类进行解析。

@interface CountryModel 

@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString* country;

@end

NSString* json = (fetch here JSON from Internet) ...
CountryModel* country ;
id obj = country ;

obj = tojson( [obj class] , json )

https://github.com/icanzilb/JSONModel做我需要的,但我需要同样的东西而不使用继承。我想在不继承 JSONModel 的情况下做同样的事情;

最佳答案

您可以为实现类工厂方法的自定义模型类(例如,CountryModel)定义一个类别。一个人为的例子:

@interface CountryModel (JSONExtension)
+ (CountryModel*) jsonExtension_modelWithJSONObject:(NSDictionary*)jsonObject error:(NSError**)error;
@end


@implementation CountryModel (JSONExtension)

+ (CountryModel*) jsonExtension_modelWithJSONObject:(NSDictionary*)jsonObject error:(NSError**)error {
// Create an object of type Foo with the given NSDictionary object
CountryModel* result = [[CountryModel alloc] initWithName:jsonObject[@"name"]];
if (result == nil) {
if (error) {
*error = [NSError errorWithDomain:@"CountryModel"
code:-100
userInfo:@{NSLocalizedDescriptionKey: @"Could not initialize CountryModel with JSON Object"}];
}
return nil;
}
// "recursively" use jsonExtension_modelWithJSONObject:error: in order to initialize internal objects:
BarModel* bar = [BarModel jsonExtension_modelWithJSONObject:jsonObject[@"bar"] error:error];
if (bar == nil) // bar is required
{
result = nil;
return nil;
}
result.bar = bar;

return result;
}

@end

jsonObject 是将 JSON 对象表示为 NSDictionary 对象。您需要先创建此表示,然后再将其传递给类工厂方法,例如:

NSError* error;
NSDictionary* jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
assert([jsonObject isKindOfClass[NSDictionary class]]);

CountryModel* model = [CountryModel jsonExtension_modelWithJSONObject:jsonObject error:&error];

关于ios - 将 JSON 字符串解析为基于 iOS 类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20745021/

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