當我使用SBJsonParser解析某些JSON時,我目前遇到了一個奇怪的問題。解析JSON - SBJsonParser問題
現在,我解析的JSON如下。
[
{
"Company":{
"id":"1",
"company_name":null
},
"relations":{
"store":[
{
"id":"1",
"restaurant_name":"Dubai",
"brief_description":null
},
{
"id":"2",
"restaurant_name":"Test2",
"brief_description":null
}
]
}
}
]
我可以輕鬆地創建一個NSDictionary,併爲公司節點正確的信息填充(?)。
但是,當涉及到關係和店節點我的問題就出現了。
NSDictionary *relations = [object valueForKey:@"relations"];
NSArray *multipleStores = [relations valueForKey:@"store"];
NSLog(@"relations: %@", relations);
for (NSDictionary *singleStore in multipleStores){
NSLog(@"Single Store: %@", singleStore);
[company grabStoreInformation:singleStore];
}
這是NSLog上面的回報。
relations: (
{
store = (
{
"brief_description" = "<null>";
id = 1;
"restaurant_name" = Dubai;
},
{
"brief_description" = "<null>";
id = 2;
"restaurant_name" = Test2;
}
);
}
)
現在,如果不是因爲什麼在發生的NSLog這將是罰款。看來singleStore實際上並沒有獲取單獨的存儲節點,而是將兩個存儲節點添加到一起。
Single Store: (
{
"brief_description" = "<null>";
id = 1;
"restaurant_name" = Dubai;
},
{
"brief_description" = "<null>";
id = 2;
"restaurant_name" = Test2;
}
)
的問題是,我需要每家店節點添加到一個NSMutableArray。所以NSDictionary將被添加到一個NSMutableArray中,然後在別處訪問(對於UITableView數據源)。
任何幫助將非常感謝讓商店節點分開。
編輯 至於要求,整個代碼解析:
SBJsonParser *parser = [[SBJsonParser alloc] init];
// parse the JSON string into an object - assuming [response asString] is a NSString of JSON data
NSDictionary *object = [parser objectWithString:[response asString] error:nil];
[parser release];
NSDictionary *companyDetails = [object valueForKey:@"Company"];
MACompany *company = [MACompany sharedMACompany];
[company initWithDetails:companyDetails];
NSDictionary *relations = [object valueForKey:@"relations"];
NSArray *multipleStores = [relations valueForKey:@"store"];
NSLog(@"relations: %@", relations);
for (NSDictionary *singleStore in multipleStores){
NSLog(@"Single Store: %@", singleStore);
[company grabStoreInformation:singleStore];
}
正如你可以看到我靠一個單獨的類複製JSON的元素。我認爲,這與我試圖解決單個商店字典拆分問題時所達到的目標有關。
偏離主題,但如果您的目標是OS5,則可以使用內置的JSON解析器 – Devraj
我們也支持iOS4。在我看來,也可以使用相同的流程來處理iOS。 –
@SebastienPeek足夠:) – Devraj