Я хочу сделать одну функцию в моем быстром проекте, который преобразует строку в формат словаря json, но я получил одну ошибку:
Невозможно преобразовать тип выражения (@lvalue NSData, параметры: IntegerLitralConvertible ...
Это мой код:
func convertStringToDictionary (text:String) -> Dictionary<String,String> {
var data :NSData = text.dataUsingEncoding(NSUTF8StringEncoding)!
var json :Dictionary = NSJSONSerialization.JSONObjectWithData(data, options:0, error: nil)
return json
}
Я делаю эту функцию в Objective-C:
- (NSDictionary*)convertStringToDictionary:(NSString*)string {
NSError* error;
//giving error as it takes dic, array,etc only. not custom object.
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
return json;
}
json
swift
dictionary
nsjsonserialization
trousout
источник
источник
let jsonDictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [String: String];
Ответы:
Предупреждение: это удобный метод для преобразования строки JSON в словарь, если по какой-то причине вам нужно работать со строкой JSON. Но если у вас есть данные JSON , вы должны вместо этого работать с данными , не используя строку вообще.
Swift 3
Swift 2
Оригинальный ответ Swift 1:
В вашей версии вы не передали правильные параметры
NSJSONSerialization
и забыли привести результат. Также лучше проверить на возможную ошибку. Последнее замечание: это работает, только если ваше значение - String. Если бы это мог быть другой тип, было бы лучше объявить преобразование словаря следующим образом:и, конечно, вам также необходимо изменить тип возвращаемого значения функции:
источник
Я обновил ответ Эрика Ди для Swift 5 :
источник
Свифт 3 :
источник
В Swift 3
JSONSerialization
есть метод с именемjsonObject(with:options:)
.jsonObject(with:options:)
имеет следующую декларацию:При использовании
jsonObject(with:options:)
, вам приходится иметь дело с обработкой ошибок (try
,try?
илиtry!
) и типа литья (сAny
). Поэтому вы можете решить вашу проблему с помощью одного из следующих шаблонов.# 1. Использование метода, который выдает и возвращает не необязательный тип
Использование:
# 2. Использование метода, который выбрасывает и возвращает необязательный тип
Использование:
# 3. Использование метода, который не выбрасывает и возвращает не необязательный тип
Использование:
# 4. Использование метода, который не выбрасывает и возвращает необязательный тип
Использование:
источник
Swift 4
источник
Swift 5
источник
Я нашел код, который преобразует строку JSON в NSDictionary или NSArray. Просто добавьте расширение.
SWIFT 3.0
КАК ПОЛЬЗОВАТЬСЯ
РАСПРОСТРАНЕНИЕ
}
источник
NSMutable...
типы коллекции в Swift вообще. Тип, приведенный кNSMutable...
, никогда не приведет к изменчивому объекту. А неопределенный тип в Swift 3+ естьAny
, нетAnyObject
.подробности
Решение
использование
Проба
Журнал испытаний
источник
для быстрой 5 я пишу демо, чтобы проверить это.
источник
источник