出现问题,同时使用 swift 从 JSON 检索数据 [英] Issue raised, while retriving datas from JSON by using swift

查看:44
本文介绍了出现问题,同时使用 swift 从 JSON 检索数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 swift 从 JSON 中检索数据.我是 JSON 的新手.我不知道如何检索这个嵌套值.我的 JSON 格式如下.

I am retrieving datas from JSON by using swift. I am new to JSON. I don't how to retrieve this nested values. My JSON format is below.

//JSON DATA
{
    "data": [
        {
            "category_id": 1,
            "category_name": "category1",
            "category_icon": "",
            "category_child": [
                {
                    "sub_category_id": 11,
                    "sub_category_name": "subcategoryname1",
                    "sub_category_icon": ""
                },
                {
                    "sub_category_id": 12,
                    "sub_category_name": "subcategoryname2",
                    "sub_category_icon": ""
                }
            ]
        },
        {
            "category_id": 2,
            "category_name": "category2",
            "category_icon": "",
            "category_child": [
                {
                    "sub_category_id": 21,
                    "sub_category_name": "subcategoryname12",
                    "sub_category_icon": ""
                },
                {
                    "sub_category_id": 22,
                    "sub_category_name": "subcategoryname22",
                    "sub_category_icon": ""
                }
            ]
        }
    ]
}

我尝试了一些方法.但是,我未能在字典中获得适当的元素.我的代码如下:

I have tried some ways. But, I failed to get proper elements in dictionary. My code is below:

ATTEPMT 1:
var dict: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

        for(var i = 0; i < (dict.valueForKey("data") as NSArray).count; i++)
        {
            self.categFromJson.addObject((dict.valueForKey("data") as NSArray) .objectAtIndex(i))

        }

        for(var i = 0; i < (categFromJson.valueForKey("category_child") as NSArray).count; i++)
        {
            self.sub_ct_FromArr.addObject((categFromJson.valueForKey("category_child") as NSArray) .objectAtIndex(i))

        }

        for(var i = 0; i < (sub_ct_FromArr.valueForKey("sub_category_name") as NSArray).count; i++)
        {
            self.sub_ct_name_arr.addObject((sub_ct_FromArr.valueForKey("sub_category_name") as NSArray) .objectAtIndex(i))

        }


//ATTEMPT 2
var dict: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

for(var i = 0; i < (dict.valueForKey("data") as NSArray).count; i++)
{
    categFromJson.addObject((dict.valueForKey("data") as NSArray) .objectAtIndex(i))

    sub_ct_FromArr.addObject((categFromJson.valueForKey("category_child") as NSArray) .objectAtIndex(i))

    sub_ct_name_arr.addObject((sub_ct_FromArr.valueForKey("sub_category_name") as NSArray) .objectAtIndex(i))
}

但是,对于两次尝试,最终输出都是错误且相同的.Bcos,代码如下.

But, for both attempt, final output is wrong and same. Bcos, coding below.

//CODING
println(sub_ct_name_arr.objectAtIndex(0))

//Output for this Code
(subcategoryname1,subcategoryname2)
//REQUIRED Output
subcategoryname1

请指导我.我不知道那是什么问题.

Kindly guide me. I don't know what is that issue.

推荐答案

首先,将您拥有的数据类型可视化很重要.

First, it's important to visualize what kind of data you have.

然后你可以像这样得到根对象,跟随哪个对象是哪种类型:

Then you can get root objects like this, following which object is of which type:

let dict = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary

let dataArray = dict["data"] as! [[String:AnyObject]]  // The array of dictionaries

for object in dataArray {
    let category_id = object["category_id"] as! Int
    let category_name = object["category_name"] as! String
    // etc
    let category_child = object["category_child"] as! [[String:AnyObject]]
    for child in category_child {
        let sub_category_id = child["sub_category_id"] as! Int
        let sub_category_name = child["sub_category_name"] as! String
        println(sub_category_id)
        println(sub_category_name)
    }
}

如果您有很多解码工作要做,您也可以考虑使用像 SwiftyJSON 这样的库.

You also might consider using a library like SwiftyJSON if you have a lot of decoding to do.

这篇关于出现问题,同时使用 swift 从 JSON 检索数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆