2015-05-24 1 views
1

Я использую swiftyJSON в моем проекте IOS, но у меня есть некоторые проблемы, чтобы получить какие-то данные в моей действительной JSON ...Как я могу получить данные в формате JSON, когда значение является значением JSON с swiftyJSON

whoJson: 

[ 
    { 
    "name": "[{\"code\":\"en\",\"name\":\"John\"},{\"code\":\"fr\",\"name\":\"Jacques\"}]", 
    "id": 1 
    }, 
    { 
    "name": "[{\"code\":\"en\",\"name\":\"Bob\"},{\"code\":\"fr\",\"name\":\"Robert\"}]", 
    "id": 11 
    } 
] 

С помощью этого кода:

println(who[0]["name"]) 

результат является:

[{"code":"en","name":"John"},{"code":"fr","name":"Jacques"}] 

Как я могу получить значения Джон или Жак? Я попытался это, но он не работает ...

println(who[0]["name"][0]["name"]) 
+0

У вас есть то, что правильно называют «встроенным JSON». Он должен проходить через парсер JSON второй раз. –

ответ

1

Значение name сама строка JSON.

Преобразовать строку в NSData экземпляр (используя правильную кодировку строки - я использую только NSUTF8StringEncoding здесь в качестве примера, так как она обычно работает в большинстве случаев):

Swift:
var name : NSString = who[0]["name"] as! NSString 
var nameAsData : NSData? = name.dataUsingEncoding(NSUTF8StringEncoding) 
объективно- с:
NSString *name = who[0][@"name"]; 
NSData *nameAsData = [name dataUsingEncoding:NSUTF8StringEncoding]; 

Затем включите эти данные в объект JSON (массив в данном случае) с помощью этого:

Swift:
var error : NSError? 
var names : NSArray = NSJSONSerialization.JSONObjectWithData(nameAsData!, options: nil, error: &error) as! NSArray; 
if (error != nil) { 
    NSLog("Error reading JSON: %@", error!.localizedDescription) 
} 
Objective-C:
NSError *__autoreleasing error; 
NSArray *names = [NSJSONSerialization JSONObjectWithData:nameAsData options:kNilOptions error:&error]; 
if (error) { 
    NSLog(@"Error reading JSON: %@", error.localizedDescription); 
} 

Так что теперь, если не произошла ошибка разбора JSON в nameAsData, names должен быть NSArrayNSDictionary из объектов. После этого вы можете делать все, что вы хотите с ним - например, чтобы получить "Джон" или "Жак" вы могли бы сделать это:

Swift:
NSLog("first name: %@", names[0]["name"] as! NSString) // John 
NSLog("second name: %@", names[1]["name"] as! NSString) // Jacques 
Objective-C:
NSLog(@"first name: %@", names[0][@"name"]); // John 
NSLog(@"second name: %@", names[1][@"name"]); // Jacques 
+0

Благодарим вас за ответ, но вы можете использовать быстрый язык вместо объективного C? – 10mitri

+0

@ 10mitri Я обновил его, чтобы включить Swift. – TylerTheCompiler

+0

Спасибо @ DrBeardface !! – 10mitri

Смежные вопросы