7

残りの Web サービス要求から返された JSON 文字列があります。この文字列を解析して、決定されたクラスのオブジェクトの配列に入れたいと思います。これが JSON 文字列です。

[
    {
        "validationCode": null,
        "FirstName": "Samer",
        "LastName": "Shame",
        "MobileNumber": "0991992993",
        "SimNumber": null,
        "Email": null,
        "PhoneNumber": "0991992994",
        "Name": "Abo Alshamat",
        "ID": 1
    },
    {
        "validationCode": null,
        "FirstName": "Ahmad",
        "LastName": "Ali",
        "MobileNumber": "0992993994",
        "SimNumber": null,
        "Email": null,
        "PhoneNumber": "0992993995",
        "Name": "AL-Kamal",
        "ID": 2
    },
    {
        "validationCode": null,
        "FirstName": null,
        "LastName": null,
        "MobileNumber": "0993377800",
        "SimNumber": null,
        "Email": null,
        "PhoneNumber": null,
        "Name": "Abo-MAhmoud",
        "ID": 12
    },
    {
        "validationCode": null,
        "FirstName": "William",
        "LastName": "Ammar",
        "MobileNumber": "0993994995",
        "SimNumber": null,
        "Email": null,
        "PhoneNumber": "0993994996",
        "Name": "Four Season",
        "ID": 3
    },
    {
        "validationCode": null,
        "FirstName": "Ammar",
        "LastName": "William",
        "MobileNumber": "0999555777",
        "SimNumber": null,
        "Email": null,
        "PhoneNumber": null,
        "Name": "uuuuu",
        "ID": 20
    },
    {
        "validationCode": null,
        "FirstName": null,
        "LastName": null,
        "MobileNumber": "0999888777",
        "SimNumber": null,
        "Email": null,
        "PhoneNumber": null,
        "Name": "NewOneFromI2",
        "ID": 18
    },
    {
        "validationCode": null,
        "FirstName": null,
        "LastName": null,
        "MobileNumber": "0999998997",
        "SimNumber": null,
        "Email": null,
        "PhoneNumber": "0999999998",
        "Name": "JOURY",
        "ID": 4
    },
    {
        "validationCode": null,
        "FirstName": null,
        "LastName": null,
        "MobileNumber": "202020",
        "SimNumber": null,
        "Email": null,
        "PhoneNumber": null,
        "Name": "TestTestRestaurant,Ammar,Hamed",
        "ID": 19
    }
]

インスタンスを取得したいクラスは次のとおりです。

@interface Restaurant : NSObject
@property (nonatomic,strong) NSString *ID;
@property (nonatomic,strong) NSString* FirstName;
@property (nonatomic,strong) NSString* LastName;
@property (nonatomic,strong) NSString* MobileNumber;
@property (nonatomic,strong) NSString* simNumber;
@property (nonatomic,strong) NSString* PhoneNumber;
@property (nonatomic,strong) NSString* Name;
@end

それを行う最善の方法は何ですか、すみません、質問は基本的な知識からのものかもしれませんが、私は客観的なCに慣れていません

お時間をいただきありがとうございます。

4

2 に答える 2

8

クラスに init メソッドを実装することをお勧めしますRestaurant

-(instancetype) initWithParameters:(NSDictionary*)parameters
{
    self = [super init];
    if (self) {
        //initializations
        _validationCode = parameters[@"validationCode"]; // may be NSNull
        _firstName = [parameters[@"FirstName"] isKindOfClass:[NSNull class]] ? @"" 
                     : parameters[@"FirstName"];
        ...
    }
    return self;
}

注: JSON Null がある可能性があるという事実により、初期化が少し複雑になります。対応する JSON 値が Null の場合、プロパティを初期化する方法を決定する必要があります。

ディクショナリparametersは、サーバーから取得した JSON 配列の最初のレベルのディクショナリになります。

まず、JSON の NSArray オブジェクトである JSON 表現を作成します。

NSError* localError;
id restaurantsObjects = [NSJSONSerialization JSONObjectWithData:data 
                                                        options:0 
                                                          error:&localError];

これが失敗しなければ、レストランを として含むオブジェクトrestaurantsObjectsになるはずです。NSArrayNSDictionary

これで、オブジェクトNSMutableArrayが取り込まれる を簡単に作成できます。Restaurant

NSMutableArray* restaurants = [[NSMutableArray alloc] init];
for (NSDictionary* restaurantParameters in restaurantsObjects) {
    Restaurant* restaurant = [Restaurant alloc] initWithParameters: restaurantParameters];
    [restaurants addObject:restaurant];
}

最後に、restaurants一部のコントローラーでプロパティを設定できます。

self.restaurants = [restaurants copy];
于 2013-11-13T13:23:19.100 に答える
6

JSONには辞書の配列があります...最初にデータをNSArrayに変換します。

NSError *jsonError = nil;

NSArray *jsonArray = (NSArray *)[NSJSONSerialization JSONObjectWithData:jsonData options:nil error:&jsonError];

これで、反復する JSON 辞書の配列ができました。

  for (NSDictionary *dic in jsonArray){
      // Now you have dictionary get value for key
    NSString *firstName = (NSString*) [dic valueForKey:@"FirstName"];//We are casting to NSString because we know it will return a string. do this for every property...  
    }
于 2013-11-13T13:15:43.730 に答える