Как проанализировать данные из ключа json по параметру target-c? - PullRequest
0 голосов
/ 30 января 2019

У меня есть файл json, подобный следующему:

{
"Jack": {
    "responseHeader": {
        "returnCode": "200",
        "returnMsg": "SUCCESS"
    },
    "responseBody": {
        "email": "Jack@gmailM.com",
        "mobile": "+100000000"
    }
},
"Jimmy": {
    "responseHeader": {
        "returnCode": "200",
        "returnMsg": "SUCCESS"
    },
    "responseBody": {
        "email": "Jimmy@gmailM.com",
        "mobile": "+100000001"
    }
  }
}

Если я хочу получить словарные ключи "Джек" и "Джимми" и установить для них заголовок навигации.
И у меня также естьКнопка для переключения заголовка навигации - «Джек» или «Джимми».
Итак, есть какие-либо идеи, чтобы сделать эту функцию.

@property NSDictionary* dataDictionary;

- (void)readDataFromFile {

NSString * filePath =[[NSBundle mainBundle] pathForResource:@"myjson" ofType:@"json"];

NSError * error;
NSString* fileContents =[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];

if(error) {

    NSLog(@"Error reading file: %@",error.localizedDescription);
}

self.dataDictionary = [NSJSONSerialization
                       JSONObjectWithData:[fileContents dataUsingEncoding:NSUTF8StringEncoding]
                       options:0 error:NULL];

self.title = @"Jack or Jimmy";

}

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Это довольно просто, вам просто нужно извлечь все ключи в массиве и использовать их в соответствии с вашими потребностями следующим образом: -

Давайте возьмем ваши данные, например: -

{
"Jack": {
    "responseHeader": {
        "returnCode": "200",
        "returnMsg": "SUCCESS"
    },
    "responseBody": {
        "email": "Jack@gmailM.com",
        "mobile": "+100000000"
    }
},
"Jimmy": {
    "responseHeader": {
        "returnCode": "200",
        "returnMsg": "SUCCESS"
    },
    "responseBody": {
        "email": "Jimmy@gmailM.com",
        "mobile": "+100000001"
    }
  }
}

Используя метод allKeys в вашем словаре, вы можете получить все ключи, присутствующие в ваших данных. Я также обновил ваш код для предотвращения сбоев: -

-(void)readDataFromFile {
    NSString * filePath =[[NSBundle mainBundle] pathForResource:@"myjson" ofType:@"json"];
    NSError * error;
    NSString* fileContents =[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
    if(error){
        NSLog(@"Error reading file: %@",error.localizedDescription);
    }else if (fileContents){
        self.dataDictionary = [NSJSONSerialization
                               JSONObjectWithData:[fileContents dataUsingEncoding:NSUTF8StringEncoding]
                               options:0 error:NULL];
        if (self.dataDictionary){
            NSArray *allKeys = [self.dataDictionary allKeys];
            //allKeys will contain String value and after that you can do anything with your array
            if (allKeys.count){
                self.title = [allKeys componentsJoinedByString:@" or "];
            }
            /*
             You also seprate with comma's or anything you want like this
             if (allKeys.count){
             self.title = [yourKeys componentsJoinedByString:@", "];
             }
             */
        }
    }
}
0 голосов
/ 30 января 2019

Используйте метод экземпляра NSArray componentJoinedByString:

NSString * filePath =[[NSBundle mainBundle] pathForResource:@"myjson" ofType:@"json"];

NSError * error;
NSString* fileContents =[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];

if(error) {

    NSLog(@"Error reading file: %@",error.localizedDescription);
}

dic = [NSJSONSerialization
                       JSONObjectWithData:[fileContents dataUsingEncoding:NSUTF8StringEncoding]
                       options:0 error:NULL];
NSArray * yourKeys;
yourKeys = [dic allKeys];
strTitle = [yourKeys componentsJoinedByString:@" or "];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...