2015-11-04 7 views
5

NSJSONSerialization.JSONObjectWithData hata gibi bir dize kullanırken "" kullanarak ancak başarılı "abc 123"NSJSONSerialization hatası. Kod = 3840 "karakteri etrafında geçersiz değer 0

bilmiyorum neden.


hata günlüğü

2015-11-04 17:42:02.997 SwiftJsonDemo[27196:2701028] Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.} 

kod

//var str = "123" // ok 
var str = "abc" // error 
let strData = str.dataUsingEncoding(NSUTF8StringEncoding) 

if let d = strData { 
    let urlStr = String(data: d, encoding: NSUTF8StringEncoding) 

    do { 
     let json = try NSJSONSerialization.JSONObjectWithData(d, options: NSJSONReadingOptions.AllowFragments) 
    } catch let e { 
     print(e) 
    } 
} else { 
    print("data error") 
} 

cevap

5
123 

geçerli bir JSON sayıdır, böylece .AllowFragments seçenek ayarlanırsa bu JSON olarak okunabilir. JSON dizeleri tırnak içine alınmalıdır: (detaylar için http://www.json.org bakınız):

"abc" 

bir Swift dizesi literal, bu tırnak işareti ters eğik çizgi ile kaçtı gibidir:

let str = "\"abc\"" // OK! 
let strData = str.dataUsingEncoding(NSUTF8StringEncoding) 
// ... 
+0

Çok teşekkürler. Anladım! – aotian16

0

Lütfen Postacı'daki Cevabı kontrol et. ben sadece hızlı kullanılıyorsa json yanıt aşağıdaki kod satırı ile uygun biçim veya html formatında

0

Kontrol olup olmadığını kontrol etmek suretiyle çözüldü: "application/json":

let contentType = response.response?.allHeaderFields["Content-Type"] as? String 

içerik türü olarak gelmiyor edilecektir. Sunucudan yanıt geçerli bir JSON dizesi olmadığını ima eder.

0

Aynı hatayı aldım. Hata, istekte olduğu ortaya çıkıyor. Aşağıdaki sözdizimi, soruna parametreler eklenirken sorunu giderdi.

request.setValue("Value", forHTTPHeaderField: "Key")