为什么要返回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数据格式的功能