json to key - >值格式

时间:2017-12-30 17:26:06

标签: arrays swift dictionary

超级新手在这里。 我有一个名为[ { "id": "1", "name": "hello", "description": "aaa" }, { "id": "2", "name": "world", "description": "bbb" } ] 的示例json,它嵌入在我的项目中

    let itemsListJson:String = "jsons/items_tmp"
    guard let urlItems = Bundle.main.url(forResource: itemsListJson, withExtension: "json") else { return }

    do{
        let dataItems = try Data(contentsOf: urlItems)
        let jsonItems = try JSONSerialization.jsonObject(with: dataItems, options: .mutableContainers)
        guard let arrayItems = jsonItems as? [Any] else {return}
        print(arrayItems.count)
        for i in 0 ..< arrayItems.count  {
            let max_damage = arrayItems[i]
            print(max_damage)
        }
    }
    catch{
        print(error)
    }

我正在尝试读取文件,将其设置为字典对象,以便我可以通过数据进行迭代并按键名调用元素。

到目前为止,我在viewDidLoad中有这个:

2
{
description = aaa;
id = 1;
name = hello;
}
{
description = bbb;
id = 2;
name = world;
}

得到以下输出:

let name = arrayItems[i].name

所以我得到了我的信息,但它也不是关键 - &gt;价值形成

当我尝试按键获取特定值时

 guard let arrayItems = jsonItems as? [String: Any] else {return}

我得到:输入任何没有会员名称的

另一方面,如果我将以下行更改为字典结构,则

dict

我没有数据。

不确定它是如何完成的。

非常感谢任何帮助

3 个答案:

答案 0 :(得分:2)

只需创建符合Codable的Item结构并将Item数组类型传递给j​​son解码器:

struct Item: Codable {
    let id: String
    let name: String
    let info: String
    private enum CodingKeys: String, CodingKey {
        case id, name, info = "description"
    }
}

游乐场测试:

let dataItems = Data("""
[
    {
        "id": "1",
        "name": "hello",
        "description": "aaa"
    },
    {
        "id": "2",
        "name": "world",
        "description": "bbb"
    }
]
""".utf8)
do {
    let items = try JSONDecoder().decode([Item].self, from: dataItems)
    for item in items {
        print("id:", item.id)
        print("name:", item.name)
        print("description:", item.info)
    }
} catch {
    print(error)
}
  

id:1

     

name:hello

     

描述:aaa

     

id:2

     

name:world

     

描述:bbb

答案 1 :(得分:0)

您将获得&#34;输入任何没有会员名称的#34;因为你没有定义它。我闻到以下可能的副本,因为你的json是一个数组,而不是字典...

Convert JSON String to Swift Dictionary

How to convert a json of objects to dictionary

Convert a JSON string to Dictionary in Swift 3

答案 2 :(得分:0)

感谢所有答案,这就是我所寻找的:

    let itemsListJson:String = "jsons/items_tmp"
    guard let urlItems = Bundle.main.url(forResource: itemsListJson, withExtension: "json") else { return }
    do{
        let dataItems = try Data(contentsOf: urlItems)
        let jsonItems = try JSONSerialization.jsonObject(with: dataItems, options: .mutableContainers)
        guard let arrayItems = jsonItems as? [Any] else {return}
        for i in 0 ..< arrayItems.count  {
            let tmp = arrayItems[i] as! [String: Any]
            print(tmp["id"]!)
            print(tmp["name"]!)
            print(tmp["description"]!)
        }
    }
    catch{
        print(error)
    }

这有助于我理解我做错了什么。 您的JSON是一个字典数组。相应地施展。 - rmaddy 所以基本上我把json作为数组,遍历数组,然后将每个数组元素视为字典,这样我就可以使用key-&gt; value属性