私は下のJSONからオブジェクトを作成するのに苦労しています。それは不気味=
と;
でフォーマットされますが、それはコンソールに出力するとき、それはどのように見えるかです:文字列ではなく数字で始まるJSON辞書からオブジェクトを正しく作成するにはどうすればよいですか?
result = (
{
media = {
image = {
1000 = "/assets/img/cities/basel-switzerland-1000px.jpg";
1500 = "/assets/img/cities/basel-switzerland-1500px.jpg";
250 = "/assets/img/cities/basel-switzerland-250px.jpg";
500 = "/assets/img/cities/basel-switzerland-500px.jpg";
};
};
}
)
私はカスタムオブジェクトを作成しましたが、私は
EXC_BAD_INSTRUCTION
エラーを得続けるが、私は "のため[Int: Any]
を使用するとき画像」とするとき、私は代わりにNSNumber
に置き換えて、私はエラーを取得する:ここで
Could not cast value of type 'NSTaggedPointerString' (0x10ee4ad10) to 'NSNumber' (0x10bc88488).
は私のためにカスタムクラスでありますJSONオブジェクト:
class sampleJSON {
var mediaDictionary: [String: Any]
var imageDictionary: [Int: Any]
var image: URL
init(mediaDictionary: [String: Any], imageDictionary: [Int: Any], image: URL){
self.mediaDictionary = mediaDictionary
self.imageDictionary = imageDictionary
self.image = image
}
init(resultsDictionary:[String: Any]){
mediaDictionary = (resultsDictionary["media"] as? [String: Any])!
imageDictionary = (mediaDictionary["image"] as? [Int: Any])!
image = URL(string: imageDictionary[1000] as! String)!
}
これは私がJSONデータを解析しています方法です:
static func downloadAllData(urlExtension: String, completionHandler: @escaping (sampleJSON?) ->()) {
let usm = UrlSessionNetworkManager.sharedManager
if let jsonDictionary = usm.parseJSONFromData(urlExtension:"\(urlExtension)")
{
let resultDictionaries = jsonDictionary["result"] as! [[String : Any]]
for resultsDictionary in resultDictionaries {// enumerate through dictionary
let nomadInfo = sampleJSON(resultsDictionary: resultsDictionary)
print(nomadInfo.mediaDictionary)
completionHandler(nomadInfo)
}
} else {
print("Error: Cannot retrieve JSON Data")
}
}
}
「数字」でも、 JSONのause辞書キーは文字列です。強制ダウンキャストを使用していますが、例外がスローされます。ダウンキャストを使わずにデバッガを調べて、あなたが実際に扱っているものを見てください。あなたが制御しないデータ(つまり、WebサーバーからのJSONデータ)で強制ダウンキャストまたは強制アンラップを使用すると、クラッシュが要求されます。条件付きキャスト/アンラッピングを使用し、より上手く解析エラーを処理します – Paulw11
これは常にJSONの辞書キーであれば、それは常に文字列です。 – SwiftyJD
キー値はどうですか?文字列以外のオブジェクトではありませんか? – SwiftyJD