2017-02-12 5 views
1

のは、私は、サーバーからもらったJSON文字列があるとしましょう:「\」3 \「」(ここでは引用符、すなわち長さ== 3で)JSONにプレーンな文字列に変換し、バックスウィフト

アンドロイドで-world、私が行うことができます。

gson.fromJson(json, new TypeToken<String>() {}.getType());を - それはNewtonSoft.Jsonを使用することができ、"3"(すなわち長さ== 1)C#の-worldで

を返します - それを

JsonConvert.DeserializeObject<string>(json, settings)"3"(すなわち、長さ== 1)

他の方法では、JSONとしてシリアル化したい文字列があります。私はgson.toJson("\"3\"")を行うと、C#で思いのAndroidでは - JSONSerializationとJsonConvert.SerializeObject("\"3\"")

問題は、それが有効なJSONとしてプレーンな文字列を扱わないということである:スウィフト/ Obj-に相当します何JSONSerialization.isValidJSONObject("\"3\"") == *false*

C世界?

私は今のところ(ちょうど引用符を追加/削除のを除いて)見つけた醜い回避策JSONSerializationを幸せにするために、1項目の配列に文字列をラップしてから削除することです「[」、「]」からJSON文字列が返されました(逆もありますが、逆シリアル化の前に "["、 "]"を追加してください)。しかし、この問題の本当の解決策にはあまりにも嫌です。とき

答えて

2

あなたは .allowFragmentsオプション渡すことができます配列またはトップレベルのオブジェクトとして 辞書を持っていないJSONをデシリアライズ:しかし

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 
} 

を、直列化する方法はないように思えますFoundationライブラリのJSONSerializationクラスのJSON のプレーンストリングです。

JSON specificationによると、 JSONオブジェクトは名前/値のペア(ディクショナリ)または の値リスト(配列)のコレクションです。 1つの文字列が有効な JSONオブジェクトではありません。

関連する問題