/ / सादे स्ट्रिंग को JSON और स्विफ्ट में वापस करें - ios, उद्देश्य-सी, json, स्विफ्ट

सादे स्ट्रिंग को जेएसओएन में बदलें और वापस स्विफ्ट - आईओएस, ऑब्जेक्ट-सी, जेसन, स्विफ्ट में कनवर्ट करें

मुझे वहाँ से एक 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 के रूप में क्रमबद्ध करना चाहता हूं। एंड्रॉइड I में "d करते हैं gson.toJson(""3"") और सी # में - JsonConvert.SerializeObject(""3"")

JSONSerialization के साथ समस्या यह है कि यह मान्य JSON के रूप में सादे स्ट्रिंग को नहीं मानता है: JSONSerialization.isValidJSONObject(""3"") == *false*

स्विफ्ट / ओबज-सी दुनिया में क्या समान होगा

बदसूरत वैकल्पिक हल मैंने पाया है (केवल उद्धरण जोड़ने / हटाने को छोड़कर) अब तक स्ट्रिंग को 1-आइटम-सरणी में लपेटना है JSONSerialization खुश है और फिर JSON- स्ट्रिंग (और अन्य तरीके से - "" [","] "डिसेरिएलाइज़ेशन से पहले) के परिणामस्वरूप" [","] को हटा दें, लेकिन यह इस समस्या का वास्तविक समाधान होने के लिए बहुत ही घृणित है।

उत्तर:

जवाब के लिए 2 № 1

जब 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 ऑब्जेक्ट।