Как анализировать объект JSON в iPhone SDK (XCode) с помощью JSON-Framework - PullRequest
8 голосов
/ 02 июля 2010

У меня есть объект JSON, подобный этому:

{ "data":
  {"array":
    ["2",
       {"array":
          [
            {"clientId":"1","clientName":"Andy","job":"developer"},
            {"clientId":"2","clientName":"Peter","job":"carpenter"}
          ]
        }
     ]
   },
 "message":"MSG0001:Success",
 "status":"OK"
}

Я хочу получить значения массива [0] (2) и значения массива [1] (clientId, clientName, job) с использованием JSON-Framework.У вас есть идеи, как это сделать?

Ответы [ 6 ]

21 голосов
/ 02 июля 2010

Предполагая, что вы выполнили инструкции для установки JSON-Framework в свой проект, вот как вы его используете (взято из документации здесь ):

// Parse the string into JSON
NSDictionary *json = [myString JSONValue];

// Get the objects you want, e.g. output the second item's client id
NSArray *items = [json valueForKeyPath:@"data.array"];
NSLog(@" client Id : %@", [[items objectAtIndex:1] objectForKey:@"clientId"]);
6 голосов
/ 08 июля 2010

спасибо за ваш ответ, моя проблема решена, я немного изменяю ваш код, вот:

// Parse the string into JSON
NSDictionary *json = [myString JSONValue];

// Get all object
NSArray *items = [json valueForKeyPath:@"data.array"];
NSArray *array1 = [[items objectAtIndex:1] objectForKey:@"array"];
NSEnumerator *enumerator = [array1 objectEnumerator];
NSDictionary* item;
while (item = (NSDictionary*)[enumerator nextObject]) {
   NSLog(@"clientId = %@",  [item objectForKey:@"clientId"]);
   NSLog(@"clientName = %@",[item objectForKey:@"clientName"]);
   NSLog(@"job = %@",       [item objectForKey:@"job"]);
}
1 голос
/ 09 июня 2015

Вы можете создать иерархию точек данных.Например, если вы хотите получить внутренний массив объекта JSON, вы можете получить к нему доступ с помощью:

NSArrray *objectArray = jsonObject[@"array"][@"2"][@"array"];

Или вы можете сделать что-то подобное.Например, в Yelp API вам предоставляется JSON бизнеса.Поместив эти предприятия в массив, вы можете получить доступ к различным элементам объекта, выполнив:

NSString *businessLocation = [businessArray objectAtIndex: indexOfBusinessInArray][@"location"][@"display_address"];
1 голос
/ 29 марта 2012

попробуйте

while (item = (NSDictionary*)[enumerator nextObject]) {
NSMutableArray *myArray = [[NSMutableArray alloc] init];
[myArray AddObject:((NSDictionary*)[enumerator nextObject])];
}
1 голос
/ 28 сентября 2010

Нам нужен 1 класс, скажем, MyData.h и MyData.m

//MyData.h
@interface MyData : NSObject {
    NSString *clientId;
    NSString *clientName;
    NSString *job;
}

@property (nonatomic, retain) NSString *clientId;
@property (nonatomic, retain) NSString *clientName;
@property (nonatomic, retain) NSString *job;

@end

//MyData.m
@implementation MyData

@synthesize clientId, clientName, job;

- (void)dealloc{    
    [clientId release];
    [clientName release];
    [job release];
    [super dealloc];
}

@end
//-------------------------------------

Для хранения наших данных:

NSMutableArray *dataArray = [[NSMutableArray alloc]init];
while (item = (NSDictionary*)[enumerator nextObject]) {
    MyData *aMyData = [[MyData alloc] init];
    aMyData.clientId   = [item objectForKey:@"clientId"];
    aMyData.clientName = [item objectForKey:@"clientName"];
    aMyData.job        = [item objectForKey:@"job"];
    [dataArray addObject:aMyData];
    [aMyData release];
    aMyData = nil;
}
0 голосов
/ 28 сентября 2010

как сохранить эти данные в NSMUtableArray ??

while (item = (NSDictionary*)[enumerator nextObject]) {
   NSLog(@"clientId = %@",  [item objectForKey:@"clientId"]);//this 
   NSLog(@"clientName = %@",[item objectForKey:@"clientName"]);//this
   NSLog(@"job = %@",       [item objectForKey:@"job"]);//this
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...