Ios 获取递归NSDictionary和NSArray格式的JSON
我是Xcode新手,很难找到从JSON获取NSArray和NSDictionary的解决方案。请任何人帮帮我。 这里是我的JSON:Ios 获取递归NSDictionary和NSArray格式的JSON,ios,objective-c,json,recursion,Ios,Objective C,Json,Recursion,我是Xcode新手,很难找到从JSON获取NSArray和NSDictionary的解决方案。请任何人帮帮我。 这里是我的JSON: [ { "categoryID": "1", "category_parentID": "0", "category_name_english": "Telivision", "category_name_arabic": "واعتلاء ثم. حاول المضي عن أخر",
[
{
"categoryID": "1",
"category_parentID": "0",
"category_name_english": "Telivision",
"category_name_arabic": "واعتلاء ثم. حاول المضي عن أخر",
"category_date_edited": "2013-02-16 06:55:02",
"sub": [
{
"categoryID": "2",
"category_parentID": "1",
"category_name_english": "Sharp",
"category_name_arabic": "واعتلاء ثم. حاول المضي عن أخر",
"category_date_edited": "2013-02-16 06:55:02",
"sub": []
},
{
"categoryID": "5",
"category_parentID": "1",
"category_name_english": "LG",
"category_name_arabic": "",
"category_date_edited": "2014-05-22 00:00:00",
"sub": [
{
"categoryID": "7",
"category_parentID": "5",
"category_name_english": "LG 1",
"category_name_arabic": "",
"category_date_edited": "2014-05-22 00:00:00",
"sub": []
},
{
"categoryID": "8",
"category_parentID": "5",
"category_name_english": "LG 2",
"category_name_arabic": "",
"category_date_edited": "2014-05-17 00:00:00",
"sub": []
}
]
}
]
},
{
"categoryID": "3",
"category_parentID": "0",
"category_name_english": "Computer",
"category_name_arabic": "واعتلاء ثم. حاول المضي عن أخر",
"category_date_edited": "2013-02-16 06:55:02",
"sub": [
{
"categoryID": "4",
"category_parentID": "3",
"category_name_english": "HP COLOUR",
"category_name_arabic": "واعتلاء ثم. حاول المضي عن أخر",
"category_date_edited": "2013-02-16 06:55:02",
"sub": []
},
{
"categoryID": "6",
"category_parentID": "3",
"category_name_english": "dell",
"category_name_arabic": "",
"category_date_edited": "2014-05-16 00:00:00",
"sub": [
{
"categoryID": "10",
"category_parentID": "6",
"category_name_english": "i5",
"category_name_arabic": "",
"category_date_edited": "2014-05-09 00:00:00",
"sub": []
},
{
"categoryID": "11",
"category_parentID": "6",
"category_name_english": "i7",
"category_name_arabic": "",
"category_date_edited": "2014-05-23 00:00:00",
"sub": []
}
]
}
]
},
{
"categoryID": "12",
"category_parentID": "0",
"category_name_english": "Mobile",
"category_name_arabic": "",
"category_date_edited": "2014-05-15 00:00:00",
"sub": []
}
]
我的代码在这里:
- (void)viewDidLoad
{
[super viewDidLoad];
RADataObject *category;
for (NSDictionary *dict in JSONArray) {
NSArray *subArray = [dict valueForKey:@"sub"];
if(subArray.count ==0) {
category = [RADataObject dataObjectWithName:[dict valueForKey:category_name_english] children:nil];
}
else {
category = [RADataObject dataObjectWithName:[dict valueForKey:category_name_english] children:[self getSubCategories:subArray]];
}
[mutableAddArray addObject:category];
}
self.data = [mutableAddArray copy];
}
-(NSArray *)getSubCategories:(NSArray *)subArray
{
NSMutableArray *duplicate = [[NSMutableArray alloc]init];
for (NSDictionary *dct in subArray) {
[duplicate addObject:[dct valueForKey:category_name_key]];
}
NSArray *returnArray = [duplicate copy];
return returnArray;
}
可以使用递归吗?给你!一定要运行它,希望它能帮助你
-(NSMutableArray *)parsingWithJsonArray:(NSArray *)array
{
for (dictionary in array)
{
NSDictionary *categoryEnglishDict = [dictionary objectForKey:@"category_name_english"];
[mutableArray addObject:categoryEnglishDict];
NSArray *subArray = [dictionary objectForKey:@"sub"];
[self parsingWithJsonArray:subArray];
}
return mutableArray; //This mutable array would contain category english language.
}
任何其他信息请告诉我。此代码可能适用于您的。。没有检查
-(void)getSubCategories:(NSArray *)subArray
{
for (NSDictionary *myDict in subArray)
{
NSString *first = [myDict objectForKey : @"category_name_english"];
NSArray *myubArray = [myDict objectForKey : @"sub"];
if([mysubArray count])
[self getSubCategories:mySubArray];
}
}
首先,您应该定义一个数据存储对象来存储您的类别-
NSMutableArray *categories=[[NSMutableArray alloc]init];
for (NSDictionary *dict in JSONArray) {
[categories addObject:[SOCategory categoryWithDictionary:dict]];
}
SOCategory.h
@interface SOCategory : NSObject
-(NSArray *)subCategories;
+(SOCategory *)categoryWithDictionary:(NSDictionary *)dictionary;
@property (copy,nonatomic) NSString *categoryName;
@end
SOCategory.m
#import "SOCategory.h"
@interface SOCategory ()
@property (strong,nonatomic) NSMutableArray *subCategoryStore;
@end
@implementation SOCategory
-(id) init {
self=[super init];
if (self != nil) {
_subCategoryStore=[[NSMutableArray alloc]init];
}
return self;
}
+(SOCategory *)categoryWithDictionary:(NSDictionary *)dictionary
{
SOCategory *newCat=[[SOCategory alloc]init];
if (newCat != nil) {
newCat.categoryName=(NSString *)[dictionary objectForKey:@"category_name_english"];
NSArray *subCats=(NSArray *)[dictionary objectForKey:@"sub"];
for (NSDictionary *dict in subCats) {
[newCat.subCategoryStore addObject:[SOCategory categoryWithDictionary:dict]];
}
}
return newCat;
}
-(NSArray *)subCategories {
return ([NSArray arrayWithArray:self.subCategoryStore]);
}
@end
然后,在现有代码中,可以填充类别数组-
NSMutableArray *categories=[[NSMutableArray alloc]init];
for (NSDictionary *dict in JSONArray) {
[categories addObject:[SOCategory categoryWithDictionary:dict]];
}
请注意,此代码不会报告格式不正确的词典的错误。您需要在哪个键中检索我要检索键“category\u name\u english”和“sub”的值。您试图将信息提取到什么数据结构中?它当然有一个递归结构,所以你可以使用递归,但你需要定义一个适当的递归数据结构,将“category_name_english”的值提取为NSString,而“sub”的值应为NSArrayWhat@Paulw11说的——这(显然)是一个递归模型,通过递归算法轻松自然地处理,但您需要具有类似递归的目标数据模型。不涉及黑魔法——只需要思考。[字典对象forkey:@“category\u name\u english”]返回NSString,我想要那个字符串,同时那个是子数组。可能吗@Walle84您可以将该字符串添加到可变数组中,因为函数将返回包含所有字符串的可变数组。只需按您的要求用“编辑”来运行一下即可。@Binni欢迎您,也别忘了投票并选择它作为正确答案。对不起。应该是
newCat
而不是self
-我已经更正了答案,我还更改了类名以避免冲突