【问题标题】:JSON marshalling and unmarshalling with SBJSON使用 SBJSON 进行 JSON 编组和解组
【发布时间】:2012-09-16 16:13:37
【问题描述】:

我正在为 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 Name {

private String fName;
private String lName;

//get setters here

这样我就可以将数据拆分为一组对象,这样我就可以检索我需要的数据,如果需要,我可以从 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);

这将获得名称数组,但我希望能够访问每个对象的名字和姓氏,然后在需要时更新它。然后再写出来。

谁能指出我正确的方向。是否可以用 SBJSON 做我对 Jackson JSON 做的同样的事情?

【问题讨论】:

  • 重新标记,因为这不是 XCode 的问题。

标签: objective-c json


【解决方案1】:

知道怎么做。

创建一个名为 List 的类

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

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

@end

然后实现综合

@synthesize fName, lName;

然后编写代码创建 List 对象并循环遍历它

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]);
}

希望这可以帮助其他尝试做与我相同的事情的人。

【讨论】:

    【解决方案2】:

    您是否考虑过使用NSKeyValueCoding 协议? setValuesForKeysWithDictionary可以为您完成很多艰巨的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多