【发布时间】:2016-09-16 23:24:02
【问题描述】:
我们的服务器端开发人员喜欢给我 JSON 字符串,其中包含字典数组的字典。这真的很令人愉快......所以我总是将它们序列化为一个 dict[String:AnyObject] 并且在我将它们拉出时简单地投射对象没有任何问题。 :( 不是今天!我修复了转换时出现的所有其他错误,但这对我来说没有意义,我查看了类似的问题,他们的代码没有反映我的情况。我这样做只是为了2 年了,所以也许我只是在使用不好的做法,有人可能会改掉我的坏习惯。无论哪种方式,我都将不胜感激。
这是我的一个解析函数的一个小sn-p,如果你需要的话,我会给你更多。
func parseRecipes()
{
if self.avarhub.jsonDICT["recipes"]!.count > 0
{
for index in 0..<self.avarhub.jsonDICT["recipes"]!.count
{
self.avarhub.recipe.append(self.avarhub.jsonDICT["recipes"]![index]["recipe"] as! String) //the errors all happen on these lines
//they say ambiguous reference to member 'subscript' or Type 'Any' has no subscript members
}
}
self.tableviewrecipe.reloadData()
}
再次感谢您的帮助。
更多代码也许这会有所帮助?
//data struscture my variable hub
internal struct varhub
{
//json dictionary
var jsonDICT = [String:AnyObject]()
var screenstatus = ""
var location = ""
var recipe = [String]()
var selectedrecipe = ""
}
//this function turns JSON string into a dictionary
func jsonStringToDict(_ text: String) -> [String:AnyObject]?
{
let data = text.data(using: String.Encoding.utf8)
do {
return try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject]
}
catch _ as NSError
{
print("error")
}
return nil
}
我确实为我的 parseRecipe 函数使用了 vadian 的解决方案,我将在许多其他地方牢记这一课,但是在我的项目中有几个地方用于其他功能,我仍然必须使用我想出的解决方案,所以我放在这里也许它会有所帮助,即使它不如 vadian 的那么好。
if self.avarhub.jsonDICT["recipes"]!.count > 0
{
for index in 0..<self.avarhub.jsonDICT["recipes"]!.count
{
let recipes = self.avarhub.jsonDICT["recipes"]! as! Array<Dictionary<String, String>>
self.avarhub.recipe.append(recipes[index]["recipe"]!)
}
}
self.tableviewrecipe.reloadData()
【问题讨论】:
-
我添加了更多代码来试图澄清我的问题。打算试试 vadian 的建议