2016-10-28 14 views
0

HTTP Cookieからシリアル化されたjsonオブジェクトを読み込もうとしています。文字列は、このSwiftのHTTPCookieのJSONエラーが動作しない

"{\"status\": 400\054 \"code\": \"14040\"\054 \"links\": {\"self\": \"\"}\054 \"title\": \"Conflicting Email\"}" 

のように見えるので、それにUnicodeエンティティが好きであります\054ちょうどカンマである,

私はこの

if let data = cookieValue.data(using: .ascii) { 
    do { 
     let obj = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String : AnyObject] 
     // print("Successfull: \(obj)") 
    } catch let error as NSError { 
     // print("Cannot convert data to json: \(data)\nError: \(error)") 
    } 
} 
のようなJSONオブジェクトに文字列を変換しようとすると、

それは言って私にエラーを返します:

Error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid escape sequence around character 17.) UserInfo=0x78e586c0 {NSDebugDescription=Invalid escape sequence around character 17.} 

文字17は\054の場所です。

ユニコードエンティティをテキストに変換するにはどうすればよいですか?

+0

UnicodeまたはASCIIをエンコードしていますか?彼らは同じ文字のためのいくつかの共通のコードを持っているかもしれませんが、彼らは異なるエンコーディングです。 – user28434

+0

また、 '\ 054'は' 54'として解析されていませんか? 「\」は「0」だけをエスケープします。 – user28434

+1

JavaScript文字列のリテラルエスケープのような匂いがします。 JSでは '\ 0'はヌル文字でも、1〜3桁の8進数エスケープの一部でもかまいません。オクタル0o54は小数点第44位はASCIIカンマです。オクタルエスケープは混乱して無駄です。そのため、JSON標準の一部ではありません(実際にはnullエスケープ)。クッキーを作成するコードがJS-string-literal-escapeに既にエンコードされたJSON値を決めたのは不思議ですが、任意の文字をクッキーにエンコードする標準的な方法がないため、狂ったことをする可能性があります。 – bobince

答えて

1

は私のために働い

var str2 = str.replacingOccurrences(of: "\054", with: ",") 

を試してみて、これは私がテストのために使用されるコードです。

import Foundation 

var str = "{\"status\": 400\054 \"code\": \"14040\"\054 \"links\": {\"self\": \"\"}\054 \"title\": \"Conflicting Email\"}" 

var str2 = str.replacingOccurrences(of: "\054", with: ",") 

let data = str2.data(using: String.Encoding.utf8, allowLossyConversion: false)! 

do { 
    let json = try JSONSerialization.jsonObject(with: data, options: []) as! [String: AnyObject] 
    for (key, value) in json { 
     print(key) 
    } 
} catch let error as NSError { 
    print("Failed to load: \(error.localizedDescription)") 
} 
+0

カンマのみをエスケープする特定のケースでは、これが1つの解決策となります。しかし、私はオクトをエスケープした文字をデコードする正しい方法を探しています。 – lukwuerz

関連する問題