Да кажем, че има JSON-низ, който получих от сървъра: "" 3 "" (с кавички, т.е. дължина == 3 тук)
В Android-света, мога да направя:
gson.fromJson(json, new TypeToken<String>() {}.getType());
- се връща "3" (т.е. дължина == 1)
В C # -world може да се използва NewtonSoft.Json:
JsonConvert.DeserializeObject<string>(json, settings)
- се връща "3" (т.е. дължина == 1)
И по друг начин, имам низ, който искам да сериализирам като JSON. В Android съм направил gson.toJson(""3"")
и в C # JsonConvert.SerializeObject(""3"")
Проблемът с JSONSerialization е, че не разглежда обикновения низ като валиден JSON: JSONSerialization.isValidJSONObject(""3"") == *false*
Какво би било еквивалентно в света Swift / Obj-C?
Грозният Решението на проблема Намерих (с изключение на просто добавяне / премахване на кавички) досега е да увиете низ в 1-item-array, за да направите JSONSerialization
щастлив и след това премахнете "[", "]" от получения JSON-низ (и по друг начин - добавете "[", "]" преди десериализацията), но е твърде отвратително да бъде истинското решение за този проблем.
Отговори:
2 за отговор № 1Когато де-serializing JSON, който няма масив или речник като обект от най-високо ниво, който можете да преминете
.allowFragments
опция:
let jsonString = ""3""
let jsonData = jsonString.data(using: .utf8)!
let json = try! JSONSerialization.jsonObject(with: jsonData, options: .allowFragments)
if let str = json as? String {
print(str) // 3
}
Въпреки това, изглежда, няма начин да се направи издавам на части обикновен низ на JSON с JSONSerialization
клас от библиотеката на фондацията.
Имайте предвид, че според Спецификация JSON, обект JSON е колекция от двойки име / стойност (речник) или подреден списък с стойности (масив). Единният низ не е валиден Обект JSON.