Json转model对象,model转json,解析json字符串

D3Json是一款用于Swift项目的JSON数据转换工具,它利用Swift的反射特性实现JSON到自定义对象的转换,解决了普通转换类无法处理复杂自定义对象的问题。支持iOS7.0+和MacOSX10.9+。
摘要由CSDN通过智能技术生成

GitHub链接:
https://github.com/mozhenhau/D3Json

D3Json

通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般json转换类不能转换自定义对象的问题
只有一个文件:D3Json.swfit
扩展写在addExtension。可以参照扩展

Usage

例子在D3Json的Project里面,写了两个测试,一个是json转单model,一个是转model的list
在playgroud里面也有两个例子,但是playgroud里面,alloc自己定义的model时直接出错,可能是playgroud的bug

只需要一句代码:
var user:User = D3Json.jsonToModel(json, objc: User())就可以把json数据转换成User类

转成list对象:
var user:Array = D3Json.jsonToModelList(jsons, objc:User())就可以把json数据转换成Array类

Problem

  1. 不处理optional类型,建议写model类时先初始化
  2. 因为swift的反射reflect的缺陷,父类的属性不能转换

Requirements

  • iOS 7.0+ / Mac OS X 10.9+
  • Xcode 6.1
  • Integration
  • CocoaPods (iOS 8+, OS X 10.9+)

2.model对象转回Json

let data : NSData! = try? NSJSONSerialization.dataWithJSONObject(user, options: [])
model对象转Json,使用自带的NSJSONSerialization:
转载地址:http://www.hangge.com/blog/cache/detail_647.html

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let label:UILabel = UILabel(frame:CGRectMake(100, 100,300,100));
        label.text = "输出结果在控制台"
        self.view.addSubview(label)
        //测试结果在output终端输入,也可以建个命令行应用测试就可以了
        testJson()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    //测试json
    func testJson() {
        //Swift对象
        let user = [
            "uname": "张三",
            "tel": ["mobile": "138", "home": "010"]
        ]
        //首先判断能不能转换
        if (!NSJSONSerialization.isValidJSONObject(user)) {
            print("is not a valid json object")
            return
        }
        //利用OC的json库转换成OC的NSData,
        //如果设置options为NSJSONWritingOptions.PrettyPrinted,则打印格式更好阅读
        let data : NSData! = try? NSJSONSerialization.dataWithJSONObject(user, options: [])
        //NSData转换成NSString打印输出
        let str = NSString(data:data, encoding: NSUTF8StringEncoding)
        //输出json字符串
        print("Json Str:"); print(str)

        //把NSData对象转换回JSON对象
        let json : AnyObject! = try? NSJSONSerialization
            .JSONObjectWithData(data, options:NSJSONReadingOptions.AllowFragments)
        print("Json Object:"); print(json)
        //验证JSON对象可用性
        let uname : AnyObject = json.objectForKey("uname")!
        let mobile : AnyObject = json.objectForKey("tel")!.objectForKey("mobile")!
        print("get Json Object:"); print("uname: \(uname), mobile: \(mobile)")
    }
}

3.解析json字符串

(由于是字符串内容是json数组,则转成NSArray。如果字符串是json对象,则转成NSDictionary。)

let string: NSString = "[{\"ID\":1,\"Name\":\"元台禅寺\",\"LineID\":1},{\"ID\":2,\"Name\":\"田坞里山塘\",\"LineID\":1},{\"ID\":3,\"Name\":\"滴水石\",\"LineID\":1}]"
let data = string.dataUsingEncoding(NSUTF8StringEncoding)

let jsonArr = try! NSJSONSerialization.JSONObjectWithData(data!,
    options: NSJSONReadingOptions.MutableContainers) as! NSArray

print("记录数:\(jsonArr.count)")
for json in jsonArr {
    print("ID:", json.objectForKey("ID")!, "    Name:", json.objectForKey("Name")!)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值