仓颉web框架--返回JSON格式数据

为什么要返回JSON数据?

轻量级数据交换格式

    JSON是一种轻量级的数据交换格式,它的设计目标是易于人阅读和编写,同时也易于机器解析和生成。JSON格式简单,易于读写,格式紧凑,占用带宽小,易于推导这种语言

跨语言支持

    JSON数据格式能够在多种编程语言中被轻松地读取和解析,包括客户端JavaScript以及服务器端的ActionScript,C,C#,ColdFusion,Java,JavaScript,Perl,PHP,Python,Ruby等语言。这使得JSON成为了前后端交互中最常用的数据交换格式之一

提高网络传输效率

    由于JSON所使用的字符要比XML少得多,可以大大节省传输数据所占用的带宽。这对于提高网络传输效率,尤其是在移动设备和低带宽环境下尤为重要。

简洁和清晰的层次结构

    JSON具有简洁和清晰的层次结构,使得它成为理想的数据交换语言。这种结构使得数据易于组织和访问,同时也使得数据的解析和生成变得更加高效。

易于解析和生成

    JSON数据格式的解析和生成相对容易,大多数现代编程语言都提供了内置的支持或者第三方库来处理JSON数据。这使得开发者可以快速地将数据转换为JSON格式或者从JSON格式中提取数据。

    综上所述,返回JSON数据是因为它提供了一种轻量级、跨语言、高效的解决方案来进行数据交换。它的简洁性和易读性使得它成为了现代Web开发中不可或缺的一部分。

    对于仓颉语言来说在web框架中返回JSON数据是不可缺省的一部分,

那让我们通过仓颉语言来实现一下返回JSON格式数据吧!​

    创建JSON的序列化和反序列化

package web.model
​
public class User <: Serializable<User> {
    private var name: String = ""
    private var age: Int64 = 0
    private var phone: String = ""
    private var email: String = ""
    private var users: ArrayList<Users> = ArrayList<Users>()
    public init() {
    }
    //不带数组(无关联的数据)
    public init(name: String, age: Int64, phone: String, email: String) {
        this.name = name
        this.age = age
        this.phone = phone
        this.email = email
    }
    //有关联的数据
    public init(name: String, age: Int64, phone: String, email: String, users: ArrayList<Users>) {
        this.name = name
        this.age = age
        this.phone = phone
        this.email = email
        this.users = users
    }
    public func serialize(): DataModel {
        if (users.isEmpty()) {
            return DataModelStruct().add(field<String>("name", this.name)).add(field<Int64>("age", this.age)).add(
                field<String>("phone", this.phone)).add(field<String>("emaim", this.email))
        } else {
            return DataModelStruct().add(field<String>("name", this.name)).add(field<Int64>("age", this.age)).add(
                field<String>("phone", this.phone)).add(field<String>("emaim", this.email)).add(
                field<ArrayList<Users>>("data", this.users))
        }
    }
    public static func deserialize(dm: DataModel): User {
        var dms = match (dm) {
            case data: DataModelStruct => data
            case _ => throw Exception("this data is not DataModelStruct")
        }
        var result = User()
        result.name = String.deserialize(dms.get("name"))
        result.age = Int64.deserialize(dms.get("age"))
        result.phone = String.deserialize(dms.get("phone"))
        result.email = String.deserialize(dms.get("emaim"))
        result.users = ArrayList<Users>.deserialize(dms.get("data"))
        return result
    }
}

 创建JSON返回方法

package web.server
​
public class BaseHttpContext {
    private let context: HttpContext
    public init(context: HttpContext) {
        this.context = context
    }
    public func Json<T>(status: UInt16, data: T) where T <: Serializable<T> {
        this.context.responseBuilder.header("content-type", "text/json; charser=utf-8").header("Access-Control-Allow-Origin", "*").status(status).body(data.serialize().toJson().asObject().toJsonString())
    }
}

封装JSON返回方法

func JSON<T>(data:T)where T <: Serializable<T> {
    func userJson(context: BaseHttpContext): Unit {
        context.Json(HttpStatusCode.STATUS_OK,data)
    }
    return userJson
}

封装JSON格式添加数据

func use() {
    let array=ArrayList<Users>()
    for(i in 1..10){
        array.append(Users("第${i}项",i))
    }
    return User("张三",18,"13600000112","111445@qq.com",array)
}

在main方法中实现JSON格式数据的调用

main() {
    let engine = Engine("127.0.0.1",80)
    let user = engine.addRouterGroup("user")
    user.Get("/gat", JSON(use()))
    engine.run()
}

以上就是仓颉web框架返回JSON数据格式的功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值