[已解决]swift 将json字符串转换为json字典变量

需要用swift将json字符串:

{
  "active": true,
  "contacts": [],
  "doc_type": "user",
  "email": "crifan@daryun.com",
  "name": "\u674e\u8302",
  "password": "111111",
  "phone": "15051464654",
  "pinned": []
}

转换为json字典对象变量

搜:

swift json parse string to dict

参考:

先去自己试试。
搞懂了之后,再去用别人的库:
然后用下面代码:
func testJsonDecode() {

    let respJsonStr:String = "" +
        "{" +
        "\"active\": true," +
        "\"contacts\": []," +
        "\"doc_type\": \"user\"," +
        "\"email\": \"crifan@daryun.com\"," +
        "\"name\": \"\\u674e\\u8302\"," +
        "\"password\": \"111111\"," +
        "\"phone\": \"15051464654\"," +
        "\"pinned\": []" +
    "}"
    print("respJsonStr=\(respJsonStr)")

    do{
        let respJsonData:NSData = respJsonStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
        print("respJsonData=\(respJsonData)")
        //        let decodedJsonDict:NSDictionary = try NSJSONSerialization.JSONObjectWithData(respJsonData, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
        let decodedJsonDict:[String:AnyObject] = try NSJSONSerialization.JSONObjectWithData(respJsonData, options: NSJSONReadingOptions.MutableContainers) as! [String:AnyObject]
        print("decodedJsonDict=\(decodedJsonDict)")
        /*
        decodedJsonDict=["active": 1, "phone": 15051464654, "password": 111111, "pinned": (
        ), "contacts": (
        ), "doc_type": user, "email": crifan@daryun.com, "name": 李茂]
        */

    }catch let decodeJsonErr as NSError {
        print("decodeJsonErr=\(decodeJsonErr)")
    }
}

然后继续想办法测试每个项的类型:

        print(String(decodedJsonDict["active"].dynamicType)) //Optional<AnyObject>
        print(String(decodedJsonDict["phone"].dynamicType)) //Optional<AnyObject>
没办法,是因为前面强制了:[String:AnyObject]
所以都是:AnyObject
然后换成:
        print(String((decodedJsonDict["active"] as! Bool ).dynamicType)) //Bool
        print(String((decodedJsonDict["phone"] as! String).dynamicType)) //String
然后可以去用别人的库了:
先去试试SwiftyJSON
很好用:
func testJsonDecode() {

    let respJsonStr:String = "" +
        "{" +
        "\"active\": true," +
        "\"contacts\": [" +
        "\"contact-095dec1d-9bf2-45e3-bdc8-4f10acf7cd7e\"," +
        "\"contact-351e6499-142b-4d89-bf79-0f756ee41a32\"," +
        "\"contact-39ee1299-4e29-43cf-904f-d8826ce1b899\"" +
        "]," +

        "\"doc_type\": \"user\"," +
        "\"email\": \"crifan@daryun.com\"," +
        "\"name\": \”CrifanLi\"," +
        "\"password\": \"111111\"," +
        "\"phone\": \"13811112222\"," +
        "\"pinned\": []" +
    "}"
    print("respJsonStr=\(respJsonStr)")

    let respJsonData:NSData = respJsonStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
    print("respJsonData=\(respJsonData)")
    let decodedJsonDict = JSON(data: respJsonData)
    print("decodedJsonDict=\(decodedJsonDict)")
    /*
        decodedJsonDict={
        "active" : true,
        "phone" : "13811112222",
        "pinned" : [

        ],
        "password" : "111111",
        "contacts" : [
        "contact-095dec1d-9bf2-45e3-bdc8-4f10acf7cd7e",
        "contact-351e6499-142b-4d89-bf79-0f756ee41a32",
        "contact-39ee1299-4e29-43cf-904f-d8826ce1b899"
        ],
        "doc_type" : "user",
        "email" : "crifan@daryun.com",
        "name" : "CrifanLi"
        }
    */

    let isActive:Bool = decodedJsonDict["active"].bool!
    print("isActive=\(isActive)") //isActive=true

    let name:String = decodedJsonDict["name"].string!
    print("name=\(name)") //name=CrifanLi

    let email:String = decodedJsonDict["email"].string!
    print("email=\(email)") //email=crifan@daryun.com

    let contactList:[String] = decodedJsonDict["contacts"].arrayObject as! [String]
    print("contactList=\(contactList)") //contactList=["contact-095dec1d-9bf2-45e3-bdc8-4f10acf7cd7e", "contact-351e6499-142b-4d89-bf79-0f756ee41a32", "contact-39ee1299-4e29-43cf-904f-d8826ce1b899"]
}
 即可。


发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量