使用 Objective-C 将 JSON 反序列化为自定义对象

rot*_*ana 1 objective-c ios

我正在使用objective-c 并尝试将JSON 反序列化为一个名为Blog 的自定义类的数组。所以下面的代码应该生成三个对象并将它们添加到一个对象数组中。我看过本教程,但仍然遇到问题。

JSON 结构如下所示:

{
  "-KGN0p1I4YFI2YNOcbv3" : {
    "BlogDomain" : "blg1",
    "BlogName" : "n1"
  },
  "-KGN198bzC54opL47vUl" : {
    "BlogDomain" : "blg2",
    "BlogName" : "n2"
  },
  "-KGN66aqkhIxBAKTcFCx" : {
    "BlogDomain" : "blg3",
    "BlogName" : "n3"
  }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

Din*_*esh 5

请尝试以下代码:

NSString* path  = [[NSBundle mainBundle] pathForResource:@"JSON" ofType:@"json"];
    NSString* jsonString = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

    NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

    NSError *error = nil;
    NSDictionary  *object = [NSJSONSerialization
                             JSONObjectWithData:jsonData
                             options:0
                             error:&error];

    if(! error) {
        NSMutableArray *array = [[NSMutableArray alloc] init];

        for (NSString *dictionaryKey in object) {
            Blog *oBlog = [[Blog alloc] init];
            oBlog.blogDomain = [[object valueForKey:dictionaryKey] objectForKey:@"BlogDomain"];
            oBlog.blogName = [[object valueForKey:dictionaryKey] objectForKey:@"BlogName"];
            [array addObject:oBlog];
        }
    } else {
        NSLog(@"Error in parsing JSON");
    }
Run Code Online (Sandbox Code Playgroud)

//博客.h

#import <Foundation/Foundation.h>

@interface Blog : NSObject
@property (nonatomic, strong) NSString *blogDomain;
@property (nonatomic, strong) NSString *blogName;
@end
Run Code Online (Sandbox Code Playgroud)

//博客.m

#import "Blog.h"

@implementation Blog

@end
Run Code Online (Sandbox Code Playgroud)

//JSON.json

{
"-KGN0p1I4YFI2YNOcbv3" : {
"BlogDomain" : "blg1",
"BlogName" : "n1"
},
"-KGN198bzC54opL47vUl" : {
"BlogDomain" : "blg2",
"BlogName" : "n2"
},
"-KGN66aqkhIxBAKTcFCx" : {
"BlogDomain" : "blg3",
"BlogName" : "n3"
}
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明