2010-07-02 4 views
8

Je objet JSON comme ceci:Comment l'analyse syntaxique objet JSON dans l'iPhone SDK (XCode) à l'aide JSON-cadre

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

Je veux obtenir le tableau [0] valeur (2) et tableau [1] value (clientId, clientName, job) à l'aide de JSON-Framework. Avez-vous une idée de comment faire cela?

+9

Désolé si je peut paraître grossier, mais Google pour iphone 'parse json', premier coup. C'est un bon tutoriel imoh. –

Répondre

21

En supposant que vous avez suivi le instructions to install JSON-cadre dans votre projet, voici comment vous l'utilisez (prise de the docs here):

// 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"]); 
+0

Typo. Ne devrait-il pas être [[itemAtIndex: 1] objectForKey: @ "clientId"]); –

+0

Vous êtes, bien sûr, correct. J'ai édité ma réponse. – deanWombourne

6

merci pour votre réponse, mon problème est résolu, je modifie un peu bit de votre code, voici:

// 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"]); 
} 
+0

J'ai une API temps au format json comment puis-je l'utiliser, s'il vous plaît aidez-moi. jsont ({ "id": "ntp-a1.nict.go.jp", "it": 1.232.963.971,248, "st": 1344228610,961, "saut": 34, "suivant": 1341100800, " étape ": 1 }) –

0

comment stocker ces données dans NSMUtableArray ??

while (item = (NSDictionary*)[enumerator nextObject]) { 
    NSLog(@"clientId = %@", [item objectForKey:@"clientId"]);//this 
    NSLog(@"clientName = %@",[item objectForKey:@"clientName"]);//this 
    NSLog(@"job = %@",  [item objectForKey:@"job"]);//this 
} 
1

Nous avons besoin d'une classe, disons MyData.h et 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 
//------------------------------------- 

Pour stocker nos données:

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; 
} 
1

essayer cette

while (item = (NSDictionary*)[enumerator nextObject]) { 
NSMutableArray *myArray = [[NSMutableArray alloc] init]; 
[myArray AddObject:((NSDictionary*)[enumerator nextObject])]; 
} 
1

Vous peut créer une hiérarchie de points de données. Par exemple, si vous voulez obtenir le tableau intérieur d'un objet JSON, vous pouvez y accéder à l'aide:

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

Ou, vous pouvez faire quelque chose de similaire. Par exemple, dans l'API Yelp, vous recevez un JSON d'une entreprise. Placer ces entreprises dans un tableau, vous pouvez accéder à différents éléments de l'objet en faisant:

NSString *businessLocation = [businessArray objectAtIndex: indexOfBusinessInArray][@"location"][@"display_address"];