2016-04-09 3 views
1

私は.jsonファイルを解析しようとしているが、私は、私は終わりに近いと思ったとして、エラーが発生しました:は、型の値をキャストすることができませんでした「__NSCFBoolean」(0x100b123b8「)NSStringの」に(0x100f0ab48)

タイプ '__NSCFBoolean'(0x10c8ba3b8)の値を 'NSString'(0x10ccb2b48)にキャストできませんでした。

それでは、どのように私はこれを避けることができます...私は私の.jsonのStringのスタッドにいじりいくつかのブール値を持っていることを

を私は私の研究を行っていると私は(驚き)に見つかりましたか?私は文字列に入れようとする前に、バーのタイプ["tags"]を与えることができるいくつかのメソッドを探しましたが、見つけることができません。

ここには、 JSONと私(長すぎ)コード:

...{ 
    "id": 3906, 
    "address": "L\u2019Hotel le 123 Sebastopol 23, boulevard S\u00e9bastopol, Paris, 75002, Le Louvre, Paris", 
    "name": "123 Sebastopol", 
    "url": "/bar/paris/le-louvre/123-sebastopol", 
    "image_url": "https://prh-wbb-prod.s3.amazonaws.com/generic_640_480/WBB%20holding%20image3_54abcf7d218d1_55b8d2128eabb.jpg", 
    "tags": "Hotel, Cocktail, Terrace", 
    "latitude": 48.867598851356, 
    "longitude": 2.3533117460327 
}, { 
    "id": 1523, 
    "address": "73 Rue d\u0027Aboukir, 75002 Paris, France, Le Louvre, Paris", 
    "name": "Lockwood", 
    "url": "/bar/paris/le-louvre/lockwood", 
    "image_url": "https://prh-wbb-prod.s3.amazonaws.com/bar_640_480/lockwood_001_553f5b2c99f4b.jpg", 
    "tags": false, 
    "latitude": 48.867716087563, 
    "longitude": 2.3469846706722 
}... 

私のコード:

id = (bar["id"] as? Int)! 
name = (bar["name"] as? String)! 
adress = (bar["address"] as? String)! 
url = (bar["url"] as? String)! 
image_url = (bar["image_url"] as? String)! 

tags = (bar["tags"] as? String)! 

latitude = (bar["latitude"] as? Double)! 
longitude = (bar["longitude"] as? Double)! 
+0

JSONの "タグ"には:false、 'があります。これがエラーの原因です。 –

+1

あなたの最初のスタブは**タグ**を文字列として表示し、2番目のタグはboolとして表示します。それがエラーの原因です。 –

+0

この行はエラー をprovocします。tags =(bar ["tags"]?String)! "tags"はString(200/208)であるはずですので、falseを空のStringに置き換えるだけです – Renaud

答えて

2

ハムは、私は十分な調査をしなかったようなのを思え! - 偽 - Stringのインスタンスとして

if let test = bar["tags"] as? String { 
    tags = (bar["tags"] as? String)! 
}else{ 
    tags=" " 
} 
-1

あなたはBool値を扱う解析しようとしている。ここで

は、ソリューションです。

にコードを変更し

:私はSwift3の下でJSONをパースすることを決議した後、同様の問題を持っていたし、結果はブールであることを期待していなかった

id = (bar["id"] as? Int)! 
name = (bar["name"] as? String)! 
adress = (bar["address"] as? String)! 
url = (bar["url"] as? String)! 
image_url = (bar["image_url"] as? String)! 

tags = (bar["tags"] as? Bool)! 

latitude = (bar["latitude"] as? Double)! 
longitude = (bar["longitude"] as? Double)! 
0

。ここで

は私のコードは、JSON出力のエントリが、それは持っていなかった

success = 0; 

ノートだった私の場合は

スウィフト3のファンではない私のようなフォークを役に立てば幸いです""成功周囲またはこの

"success" = "0" 
よう

だからここで私は「」ノー

let jsonResult = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary 
if (jsonResult?["success"] as? Bool)! 
{ 
     okToLogIn = true 
     print(okToLogIn) 
} 
else 
{ 
     okToLogIn = false 
     print(okToLogIn) 
} 

に注目JSON出力

success = 0 

からbool値を取得するために使用されるコードがあるので、私はちょうどブールとして、それを維持し、真または偽と照合し、私のコードは今通りに動作します。

関連する問題