Як разабраць гэты JSON ў UITableView?

Я пачатковец у iOS . Я хачу разабраць наступны JSon ў маім UITableView , але я не ведаю, як зрабіць гэта. Я ведаю, што JSON разборы выкарыстоўваючы NSURL , але ў гэтым прамы JSON разборы я сутыкнуўся праблемы .please дапамога .. вось гэта:

NSString *url = @"{\"LinkResult\":{\"0\":{\"Name\":\"Veeva - Devon1\",\"ButtonDisplay\":\"Veeva\",\"PasswordSaving\":\"Yes\",\"Status\":\"Success\",\"Message\":\"No Error\", \"Identifiers\": {\"Identifier1Name\": \"Identifier1value\",\"Identifier2Name\": \"Identifier2value\",\"Identifier3Name\": \"Identifier3value\"},}}}";

калі ласка, скажыце мне наступныя крокі ...

4
@Durgaprasad, пачынаюць выкарыстоўваючы NSJSONSerialization клас, дадзенае яблык. Ён выконвае ўсе вашы патрабаванні. Акрамя таго, яго вельмі лёгка апрацоўваць дадзеныя.
дададзена аўтар Tirth, крыніца
Добра, я гляджу ... чакай
дададзена аўтар Warewolf, крыніца
гэта адказ або адправіць PostData
дададзена аўтар Warewolf, крыніца
Выкарыстоўвайце SBJson для разбору JSON. Яго проста. Пошук у Google
дададзена аўтар Durgaprasad, крыніца
Якую інфармацыю вы хочаце паказаць у вашым Tableview?
дададзена аўтар Anupdas, крыніца
Калі я правільна адгадаў, у вас ёсць слоўнік з ключом LinkResultSet , якія маюць ключавыя пары значэнняў лікавых лікаў і адпаведных карыстальнікаў. Калі гэта статычныя дадзеныя, якія вы можаце захацець змяніць структуру трохі, як слоўнікі не падтрымліваюць парадак ключоў.
дададзена аўтар Anupdas, крыніца
@ Anupdas- я Din атрымаць у ...
дададзена аўтар Deep, крыніца
@Anupdas Імя, пароль, статус, паведамленне, Identifiers1,2,3 Імя ...
дададзена аўтар Deep, крыніца
да .. але я не выманне гэтага JSON з любога URL .. яго статычныя напісана ў маім кодзе ...
дададзена аўтар Deep, крыніца
@Hercules св просты JSON я хачу, каб атрымаць у маім UITableView. Я проста пакласці гэты JSON ў маім ViewController так, як я магу далей працягнуць ..please сказаць ...
дададзена аўтар Deep, крыніца

8 адказы

Вось гэта сябар

NSString *url = @"{\"LinkResult\":{\"0\":{\"Name\":\"Veeva - Devon1\",\"ButtonDisplay\":\"Veeva\",\"PasswordSaving\":\"Yes\",\"Status\":\"Success\",\"Message\":\"No Error\", \"Identifiers\": {\"Identifier1Name\": \"Identifier1value\",\"Identifier2Name\": \"Identifier2value\",\"Identifier3Name\": \"Identifier3value\"},}}}";

NSArray *arrComponents = [url componentsSeparatedByString:@","];
NSMutableArray *arrmFilter = [[NSMutableArray alloc] init];

for(int i = 0; i < [arrComponents count] ;i++)
{
    NSString *str = [arrComponents objectAtIndex:i];
    //str = [str stringByReplacingOccurrencesOfString:@":" withString:@""];
    str = [str stringByReplacingOccurrencesOfString:@"\"" withString:@""];
    str = [str stringByReplacingOccurrencesOfString:@"{" withString:@""];
    str = [str stringByReplacingOccurrencesOfString:@"}" withString:@""];
    str = [str stringByReplacingOccurrencesOfString:@"0" withString:@""];

    [arrmFilter addObject:str];
}

NSLog(@"Filtered array = %@", arrmFilter);

Вы павінны будзеце зрабіць некаторыя змены ў `stringByReplacingOccurencesOfString
Але гэта Vill экстракт JSON .... Спадзяюся, што гэта дапамагае ..

5
дададзена
Вы павінны чытаць JSON і NSJSONSerialization клас
дададзена аўтар Dushyant Singh, крыніца
чаму адмоўныя моманты, сэр? раздрукаваць яго ў дэманстрацыйным кодзе пасля ўстаўкі ў масіў можна лёгка змясціць дадзеныя ў Tableview
дададзена аўтар Purushottam Sen, крыніца
Хм, я атрымаў яго, сэр .. Дзякуй
дададзена аўтар Purushottam Sen, крыніца

Гэта структура вашага JSON

{
    "LinkResult": {
        "0": {
            "Name": "Veeva - Devon1",
            "ButtonDisplay": "Veeva",
            "PasswordSaving": "Yes",
            "Status": "Success",
            "Message": "No Error",
            "Identifiers": {
                "Identifier1Name": "Identifier1value",
                "Identifier2Name": "Identifier2value",
                "Identifier3Name": "Identifier3value"
            }
        }
    }
}

Стварыце файл у фармаце JSON з дапамогай любога інтэрнэт-генератары і дадаць яго ў свой праект. Мае ўласцівасць для падтрымання DataSource.

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *filePath = [[NSBundle mainBundle]pathForResource:@"Data"
                                                        ofType:@"json"];
    NSData *data = [[NSData alloc]initWithContentsOfFile:filePath];

    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data
                                                         options:0
                                                           error:nil];

    //A dictionary which will contain info all users
    self.users = dict[@"LinkResult"];

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[self.users allKeys] count];;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

   //Configure the cell...

    NSArray *sortedKeys = [[self.users allKeys]sortedArrayUsingSelector:@selector(compare:)];
    NSString *key = sortedKeys[indexPath.row];

    NSDictionary *user = self.users[key]; 

    cell.textLabel.text = user[@"Name"];
    cell.detailTextLabel.text = user[@"Status"];

    return cell;
}

Зыходны код

3
дададзена
@Deep Вы можаце, з зыходным кодам, вы можаце высветліць усе астатняе. Адзін з падыходаў, каб зрабіць карыстацкі tableViewCell для прадстаўлення дадзеных у тым, як вы хочаце.
дададзена аўтар Anupdas, крыніца
Вялікі дзякуй Anup .. што яшчэ, калі я хачу атрымаць усе значэння ў асобных клетках ??
дададзена аўтар Deep, крыніца

Гэта структура вашага JSON

{
    "LinkResult": {
        "0": {
            "Name": "Veeva - Devon1",
            "ButtonDisplay": "Veeva",
            "PasswordSaving": "Yes",
            "Status": "Success",
            "Message": "No Error",
            "Identifiers": {
                "Identifier1Name": "Identifier1value",
                "Identifier2Name": "Identifier2value",
                "Identifier3Name": "Identifier3value"
            }
        }
    }
}

Стварыце файл у фармаце JSON з дапамогай любога інтэрнэт-генератары і дадаць яго ў свой праект. Мае ўласцівасць для падтрымання DataSource.

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *filePath = [[NSBundle mainBundle]pathForResource:@"Data"
                                                        ofType:@"json"];
    NSData *data = [[NSData alloc]initWithContentsOfFile:filePath];

    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data
                                                         options:0
                                                           error:nil];

    //A dictionary which will contain info all users
    self.users = dict[@"LinkResult"];

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[self.users allKeys] count];;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

   //Configure the cell...

    NSArray *sortedKeys = [[self.users allKeys]sortedArrayUsingSelector:@selector(compare:)];
    NSString *key = sortedKeys[indexPath.row];

    NSDictionary *user = self.users[key]; 

    cell.textLabel.text = user[@"Name"];
    cell.detailTextLabel.text = user[@"Status"];

    return cell;
}

Зыходны код

3
дададзена
@Deep Вы можаце, з зыходным кодам, вы можаце высветліць усе астатняе. Адзін з падыходаў, каб зрабіць карыстацкі tableViewCell для прадстаўлення дадзеных у тым, як вы хочаце.
дададзена аўтар Anupdas, крыніца
Вялікі дзякуй Anup .. што яшчэ, калі я хачу атрымаць усе значэння ў асобных клетках ??
дададзена аўтар Deep, крыніца

Вам трэба пераўтварыць радок JSON ў аб'ект NSDictionary для таго, каб выкарыстоўваюцца ў Tableview ніжэй кода пераўтвораць яго ў аб'ект NSDictionary, а затым вы можаце ўсталяваць значэнне адпаведна з дапамогай свайго ключа.

- (void)viewDidLoad
{
    NSString *jsonString = @"{\"LinkResult\":{\"0\":{\"Name\":\"Veeva - Devon1\",\"ButtonDisplay\":\"Veeva\",\"PasswordSaving\":\"Yes\",\"Status\":\"Success\",\"Message\":\"No Error\", \"Identifiers\": {\"Identifier1Name\": \"Identifier1value\",\"Identifier2Name\": \"Identifier2value\",\"Identifier3Name\": \"Identifier3value\"},}}}";

    NSData *jsondata=[jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsondata options:0 error:nil];

    displaydata=[[dataDictionary valueForKey:@"LinkResult"] valueForKey:@"0"];
    NSMutableArray *mutableKeys=[[NSMutableArray alloc] initWithArray:[displaydata allKeys]];
    [mutableKeys removeObject:@"Identifiers"];
    keys=[[NSArray alloc] initWithArray:mutableKeys];

    NSLog(@"JSON DIct: %@", displaydata);
    [super viewDidLoad];
   //Do any additional setup after loading the view, typically from a nib.
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [keys count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *[email protected]"cellIdentifier";

    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell==nil) {
        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    cell.textLabel.text = [displaydata valueForKey:[keys objectAtIndex:indexPath.row]];
    return cell;
}
0
дададзена
@Deep вы можаце замяніць код лёгка з маім кодам.
дададзена аўтар Warewolf, крыніца
@Deep Вы павінны былі б зрабіць гэта ў cellForRowAtIndexPath метад у UITableViewController
дададзена аўтар Eric Amorde, крыніца
Дзякуй .. але як адлюстраваць гэтыя дадзеныя ў фармаце JSON на маім tableviewcell ??
дададзена аўтар Deep, крыніца
    NSString *url = @"{\"LinkResult\":{\"0\":{\"Name\":\"Veeva - Devon1\",\"ButtonDisplay\":\"Veeva\",\"PasswordSaving\":\"Yes\",\"Status\":\"Success\",\"Message\":\"No Error\", \"Identifiers\": {\"Identifier1Name\": \"Identifier1value\",\"Identifier2Name\": \"Identifier2value\",\"Identifier3Name\": \"Identifier3value\"},}}}";

    NSData* jsonData = [url dataUsingEncoding:NSUTF8StringEncoding];

    NSError *error;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
    NSLog(@"json is %@", json);

    NSDictionary *LinkResult = [json valueForKey:@"LinkResult"];
    NSLog(@"LinkResult is %@", LinkResult);

    for (id key in [LinkResult allKeys]) {
        NSLog(@"Value for 0 index is %@", [LinkResult valueForKey:key]);

        NSLog(@"ButtonDisplay is %@", [[LinkResult valueForKey:key] valueForKey:@"ButtonDisplay"]);
        NSLog(@"Message is %@", [[LinkResult valueForKey:key] valueForKey:@"Message"]);
        NSLog(@"Name is %@", [[LinkResult valueForKey:key] valueForKey:@"Name"]);
        NSLog(@"PasswordSaving is %@", [[LinkResult valueForKey:key] valueForKey:@"PasswordSaving"]);
        NSLog(@"Status is %@", [[LinkResult valueForKey:key] valueForKey:@"Status"]);
    }
0
дададзена

Вы хацелі б выкарыстоўваць клас NSJSONSerialization для гэтага, нешта накшталт:

NSData *json = [url dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
NSDictionary *identifiers = [dataDictionary objectForKey:@"Identifiers"];
// Do stuff with the data

Спадзяюся, што мае сэнс. Вы можаце цягнуць элементы з радка JSON з дапамогай:

[dataDictionary objectForKey:@"ElementName"];
0
дададзена

для аналізу можна выкарыстоўваць NSDictionary, як гэта ...

NSData *json = [url dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
    NSDictionary *identifiers = [dataDictionary objectForKey:@"Your key"];

і паказаць яго ў Tableview вы маглі б выкарыстоўваць

arr = [[JSONObject objectForKey:@“results”] objectForKey:@“Your key”];

// and set cell text label as -

cell.textLabel.text =[[arr objectAtIndex:indexPath.row] objectForKey:@"Your key"];
0
дададзена

для аналізу можна выкарыстоўваць NSDictionary, як гэта ...

NSData *json = [url dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
    NSDictionary *identifiers = [dataDictionary objectForKey:@"Your key"];

і паказаць яго ў Tableview вы маглі б выкарыстоўваць

arr = [[JSONObject objectForKey:@“results”] objectForKey:@“Your key”];

// and set cell text label as -

cell.textLabel.text =[[arr objectAtIndex:indexPath.row] objectForKey:@"Your key"];
0
дададзена