Json 从Swift中选定的下拉选项获取数据

Json 从Swift中选定的下拉选项获取数据,json,swift,xcode,dropdown,Json,Swift,Xcode,Dropdown,我从JSON重发中得到的是: "meal" : { "id" : 354, "unit" : "cup", "disable" : "0", "created_at" : "2017-04-17 13:09:12", "small" : "0", "type" : "7", "price" : "0", "image" : "da6ddbab1f7b8b37a536c353fac16e3958f4be78022f6.png", "family_id" : "125", "updated_at"

我从JSON重发中得到的是:

 "meal" : {
"id" : 354,
"unit" : "cup",
"disable" : "0",
"created_at" : "2017-04-17 13:09:12",
"small" : "0",
"type" : "7",
"price" : "0",
"image" : "da6ddbab1f7b8b37a536c353fac16e3958f4be78022f6.png",
"family_id" : "125",
"updated_at" : "2017-04-17 13:32:41",
"deleted_at" : null,
"medium" : "10",
"large" : "30",
"name" : "Grapefruit"
}

例如,这种果汁有两种尺寸“中”和“大”。在下拉列表中,我只想显示有价格的尺寸,只有尺寸,当用户选择我想要打印的尺寸时,它的价格和选择的尺寸。因此,我找到了这个库,我一直在试图找到一种方法来成功实现我想要的东西,但没有运气,因为它只会显示所选物品,而不显示物品的大小(或所选价格,而不显示价格的大小)


有什么方法或图书馆可以帮助我吗

Vyacheslav是对的,你的json在这方面很奇怪,特别是如果不同的食物可以有不同类型的大小。尝试如下构造json:

“meal”:{
       // ...
        “sizes”: [{“type”:”medium”, “price”: 10}, {“type”:”large”, “price”: 30}]
    }
availableSizes = (mealJSON[“sizes”] as? [[String: AnyObject]]) ?? []
通过这种方式,您可以获得不同大小的数组,如下所示:

“meal”:{
       // ...
        “sizes”: [{“type”:”medium”, “price”: 10}, {“type”:”large”, “price”: 30}]
    }
availableSizes = (mealJSON[“sizes”] as? [[String: AnyObject]]) ?? []
虽然您的大小变量(我假设是下拉式UI)必须调整其输入。如果您只想要大于0的价格,请添加以下内容:

availableSizes = availableSizes.filter { ($0[“price”] as? Int) ?? 0 > 0 }
选择大小后,您的函数有望获得用户选择作为参数的大小数组的索引,以便您可以使用以下方法访问所选大小:

availableSizes[selectedIndex][“type”]

如果你想使用不同的价格,那么你的json看起来很奇怪。不管怎样,还是要使用不同的价格。谢谢你仔细的回答。我仍然必须遵循给我的结构,没有办法改变它。有没有办法在swift中构造JSON以便于显示?有一些库可以帮助swift的JSON兼容性(SwiftyJSON是一个众所周知的库),结构和JSON之间的转换是swift 4语言的固有特性。不过,显示JSON是完全不同的。您可以做任何事情,从在标签上显示原始文本到创建自定义控件或视图来显示您的值。您可以使用以下代码获得一个大小数组:
availableSizes=mealJSON.keys.filter{size.contains($0)}
其中
size
是一个可能大小的数组,例如
[“中”、“大”]