Mam następujące dane zapisane jako NSString
:
{
Key = ID;
Value = {
Content = 268;
Type = Text;
};
},
{
Key = ContractTemplateId;
Value = {
Content = 65;
Type = Text;
};
},
Chcę przekonwertować te dane na plik NSDictionary
zawierający pary klucz-wartość.
Staram się najpierw przekonwertować NSString
Do JSON obiekty w następujący sposób:
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
Jednak kiedy próbuję:
NSString * test = [json objectForKey:@"ID"];
NSLog(@"TEST IS %@", test);
Otrzymuję wartość jako NULL
.
Czy ktoś może zasugerować w czym jest problem?
objective-c
xcode
json
nsstring
nsdictionary
GuybrushThreepwood
źródło
źródło
Odpowiedzi:
Uważam, że błędnie interpretujesz format JSON dla wartości kluczowych. Powinieneś przechowywać swój ciąg jako
NSString *jsonString = @"{\"ID\":{\"Content\":268,\"type\":\"text\"},\"ContractTemplateID\":{\"Content\":65,\"type\":\"text\"}}"; NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
Teraz, jeśli wykonasz instrukcję NSLog
NSLog(@"%@",[json objectForKey:@"ID"]);
Rezultatem byłby inny NSDictionary.
{ Content = 268; type = text; }
Mam nadzieję, że to pomoże uzyskać jasne zrozumienie.
źródło
Myślę, że otrzymujesz tablicę z odpowiedzi, więc musisz przypisać odpowiedź do tablicy.
źródło
Użyj tego kodu, gdzie str jest ciągiem JSON:
NSError *err = nil; NSArray *arr = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&err]; // access the dictionaries NSMutableDictionary *dict = arr[0]; for (NSMutableDictionary *dictionary in arr) { // do something using dictionary }
źródło
Swift 3:
if let jsonString = styleDictionary as? String { let objectData = jsonString.data(using: String.Encoding.utf8) do { let json = try JSONSerialization.jsonObject(with: objectData!, options: JSONSerialization.ReadingOptions.mutableContainers) print(String(describing: json)) } catch { // Handle error print(error) } }
źródło
Użyj poniższego kodu, aby pobrać obiekt odpowiedzi z
AFHTTPSessionManager
bloku błędu; następnie możesz przekonwertować typ ogólny na wymagany typ danych:id responseObject = [NSJSONSerialization JSONObjectWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] options:0 error:nil];
źródło