2017-09-24 138 views
0

我正在嘗試從Web應用讀取JSON輸出。這個輸出是:在Swift中讀取JSON輸出

[{"group_name":"XYZ","adminof":0}] 

我有一個結構,看起來像:

struct grouplistStruct{ 
var group_name : String 
var adminof : Any 
} 

的代碼,我現在用的就是:

let jsonArray = try JSONSerialization.jsonObject(with: data, options: []) as! [Any] 
for jsonResult in jsonArray{ 

      let loc = grouplistStruct(group_name: jsonResult["group_name"], adminof: jsonResult["adminof"]) 

我可以看到jsonArray正確讀取值。同樣,在for循環,jsonResult也正確讀取值

但是,當我嘗試將此值賦給一個結構體變量,它顯示了一個錯誤:

Type 'Any' has no subscript members 

這是爲什麼發生?對不起,我對Swift很陌生,所以我正在學習這一切。

+0

試着去'[[字符串:任何]]'而不是'在此聲明[任何]' '嘗試JSONSerialization.jsonObject(使用:data,options:[])as! [任何]' – 3stud1ant3

+0

這工作,但這是做什麼?你能拋出一些光嗎? – coderatlarge

+1

請[在錯誤上搜索](https://stackoverflow.com/search?q=%5Bswift%5D+Type+%27Any%27+has+no+subscript+members)。這已被問過很多次,之前。 – rmaddy

回答

0

由於您的JSON數據是一個包含這樣的字典的數組:

[{"group_name":"XYZ","adminof":0}] 

你所得到的錯誤

Type 'Any' has no subscript members

,因爲你是向下轉換的JSON作爲Any的數組,並在迅速Any (顧名思義)代表任何類型,如Int,DoubleDictionary of type [String: String],因爲您知道IntDouble不能hav e下標如someInt["subscript"]

因此,您需要使用[[String: Any]]向下傾倒到此特定類型。 這表示包含類型爲[String:Any]的字典的數組。這將工作,因爲字典可以有標會員,例如someDict["group_name"]

因此,你應該在這個語句中使用[[String: Any]]代替[Any]try JSONSerialization.jsonObject(with: data, options: []) as! [Any]