/ / Конвертиране на обикновен низ в JSON и обратно в Swift - ios, objective-c, json, swift

Преобразувайте обикновения низ в JSON и обратно в Swift - ios, objective-c, json, swift

Да кажем, че има 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.