Objective c 使用SBJSON进行JSON编组和解编

Objective c 使用SBJSON进行JSON编组和解编,objective-c,json,Objective C,Json,我正在为Android和iPhone开发一个应用程序,在iPhone上进行编组和解编组时遇到问题。有了Android,这就足够简单了,我使用的是Jackson JSON解析器,而且网上有很多教程,使其易于使用 在iPhone上,我使用的是SBJSON解析器,然而,关于如何有效地使用它的在线信息似乎非常缺乏 以下面的JSON为例 { "data":{ "name":[ { "fName":"John", "lName"

我正在为Android和iPhone开发一个应用程序,在iPhone上进行编组和解编组时遇到问题。有了Android,这就足够简单了,我使用的是Jackson JSON解析器,而且网上有很多教程,使其易于使用

在iPhone上,我使用的是SBJSON解析器,然而,关于如何有效地使用它的在线信息似乎非常缺乏

以下面的JSON为例

{
"data":{
    "name":[
            {
            "fName":"John",
            "lName":"Doe"
            },
            {
            "fName":"Jane",
            "lName":"Doe"
            }
            ]
}
}
如果我使用Java和Jackson JSON解析器,这将很容易。我会建立一个像这样的班级

public class Parse {

private Data data;
//获取集数据类

public class Data {

private List<Name> name;

//get set name list
然后在数据类中

public class Data {

private List<Name> name;

//get set name list
通过这种方式,我将数据分割成一组对象,这样我就可以检索到我需要的数据,如果需要,我可以从Java更新JSON,然后再次将其写入一个新的JSON文件,非常简单,即

ObjectMapper mapper = new ObjectMapper();

    Parse test = mapper.readValue(new File("/Users/adam/Documents/JSON/list.json"),
            Parse.class);

    System.out.println(test.getData().getName().get(0).getfName());
或者我可以让它做

test.getData().getName().get(0).setfName("test");
我想知道的是,如何使用Xcode和SBJSON实现这一点。我知道如何解析数据并将其打印出来,但我希望能够将其打印到一组对象中,进行更改,然后像使用Jackson JSON解析器一样再次将其打印出来。我所做的是

  NSString *file = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"json"];  
 NSData *Data = [NSData dataWithContentsOfFile:file];  
 NSString *jsonString = [[NSString alloc] initWithData:Data encoding:NSUTF8StringEncoding];


 NSDictionary *dictionary = [jsonString JSONValue];

NSArray *name = [dictionary valueForKeyPath:@"data.name"];

NSLog(@"%@", name);
这将获得名称数组,但我希望能够访问每个对象的名字和姓氏,然后根据需要进行更新。然后再把它写出来


有没有人能给我指出正确的方向。有没有可能和我用Jackson JSON和SBJSON做的一样呢?

了解了如何做

制作一个名为List的类

@interface List : NSObject{
  NSString *fName;
  NSString *lName;
}

@property (nonatomic, retain) NSString *fName;
@property (nonatomic, retain) NSString *lName;

@end
然后实现综合

@synthesize fName, lName;
然后编写代码来创建列表的对象并在其中循环

NSMutableArray *array = [[NSMutableArray alloc] init];
List * list;
NSArray * listArray = [MainJSON valueForKeyPath:@"data.name"];

for(NSDictionary * listInfo in listArray) {
    list = [[List alloc] init];
    [list setFName:[listInfo objectForKey:@"fName"]];
    [list setLName:[listInfo objectForKey:@"lName"]];
    [array addObject:list];
}

for (int i = 0; i < [array count]; i++) {
    List* l = [array objectAtIndex: i];
    NSLog(@"%@", [l fName]);
    NSLog(@"%@", [l lName]);
}
NSMutableArray*array=[[NSMutableArray alloc]init];
列表*列表;
NSArray*listArray=[MainJSON valueForKeyPath:@“data.name”];
用于(NSDictionary*listArray中的listInfo){
list=[[list alloc]init];
[list setFName:[listInfo objectForKey:@“fName”];
[list setLName:[listInfo objectForKey:@“lName”];
[数组addObject:list];
}
对于(int i=0;i<[数组计数];i++){
List*l=[array objectAtIndex:i];
NSLog(@“%@,[l fName]);
NSLog(@“%@,[l名称]);
}

希望这能帮助其他和我一样的人

您是否考虑过使用
NSKeyValueCoding
协议?通过重新标记
setValuesForKeysWithDictionary

可以为您完成大量的艰苦工作,因为这不是XCode的问题。