/ / Vyriešiť čísla a bools v nested NSDictionary - ios, objektív-c, json

Vyriešte čísla a bolesti v vnorených NSDictionary - ios, objektív-c, json

Povedzme, že som vložil reťazec JSON do NSDictionary, ktorý mal niektoré čísla napísané ako reťazce, Výsledný NSDictionary môže vyzerať takto:

NSDictionary* example = @{
@"aNumber": @"1",
@"aFloat": @"2.9708",
@"aBool": @"true",
@"aNestedDict": @{
@"more": @"220",
@"evenMore": @"false",
@"anArray": @[
@"1",
@"2"
]
}
};

Chcem analyzovať float, integer a bool("true", "false", "yes", "no" - nepodstatné pre malé a veľké písmená) do svojich príslušných typov triedy Objective-c. Pozrela som sa, ale nemôžem nájsť žiadne príklady zabudovaných rozhraní API.

(Rozšírené, pretože ľudia nečítajú otázku)

odpovede:

1 pre odpoveď č. 1

Nie je k dispozícii rozhranie API, ale môžete si pomôcť pri príprave pomocníka. API, ktoré Apple poskytuje, sú však pomocnými funkciami NSString, t.j .: .integerValue, .doubleValue, .boolValue, Nielenže je to obmedzené len na NSString, ale nie je komplexné / inteligentné.


0 pre odpoveď č. 2

Takže ak chcete reťazec analyzovať na premennú typu BOOL, môžete urobiť niečo také jednoduché ako:

 - (NSNumber *)parseBool:(NSString *)value
{
if( [value caseInsensitiveCompare:@"yes"] == NSOrderedSame || [value caseInsensitiveCompare:@"true"] == NSOrderedSame )
{
return @YES;
} else if ([value caseInsensitiveCompare:@"no"] == NSOrderedSame || [value caseInsensitiveCompare:@"false"] == NSOrderedSame )
{
return @NO;
} else
{
return nil;
}
}

EDIT: Pre int a dvojité stačí použiť:

NSString *string = @"1";
NSInteger intValue = string.integerValue;
double doubleValue = string.doubleValue;

0 pre odpoveď č. 3

JSON podporuje reťazce, čísla s desiatkami a bez nich, booleovské hodnoty, nulové hodnoty, slovníky a polia. Takže každý, kto chce reprezentovať čísla a booleovské hodnoty v JSON, to môže len urobiť.

Každý, kto vyrába JSON, by mal dokumentovať, čo onivyrábajú. Takže ak trvajú na predstavovaní booleovskej hodnoty ako reťazec, mali by dokumentovať, ktoré reťazce sa použijú na reprezentovanie pravdivých a nepravdivých. A potom je to len otázka porovnávania reťazcov.

Pre čísla uložené ako reťazec môžete použiť integerValue alebo doubleValue, ktorý funguje v poriadku pre reťazce.