2012-03-15 40 views
2

我正在開發Android和iPhone的應用程序,我在iPhone上有一個問題編組和解組。使用Android很容易,我使用Jackson JSON解析器,並且有大量的在線教程使其易於使用。JSON編組和解組與SBJSON

在iPhone上,我使用的是SBJSON解析器,但是似乎真正缺乏有關如何有效使用它的信息。

看看下面的一塊JSON

{ 
"data":{ 
    "name":[ 
      { 
      "fName":"John", 
      "lName":"Doe" 
      }, 
      { 
      "fName":"Jane", 
      "lName":"Doe" 
      } 
      ] 
} 
} 

如果我是使用Java和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 

這樣我把數據分成一組對象,這樣我就可以檢索我需要的數據,如果需要的話,我可以更新JSON,th恩再次寫出來到一個新的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。我知道如何解析數據並將其打印出來,但是我希望能夠將它打印到一組對象中,進行更改,然後像JacksonJSON解析器那樣再次寫出它。我所做的是

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

這將讓名字的數組,但我希望能夠訪問的第一個名字和姓氏的每個對象,然後更新它,如果我需要。然後再寫出來。

任何人都可以指出我在正確的方向。是否有可能做與傑克遜JSON和SBJSON一樣的事情?

+0

因爲這不是XCode的問題而被重新標記。 – Almo 2012-03-16 13:27:59

回答

1

找到了如何做到這一點。

使一類名爲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]); 
} 

希望創建列表和循環的對象這可以幫助別人誰試圖做同樣的事情,我是。

0

您是否考慮過使用NSKeyValueCoding協議? setValuesForKeysWithDictionary可以爲您完成很多艱苦的工作。