在前后端分离架构下,JSON 格式被广泛用于前端的数据交互,并成为事实上的规范,但前端在编写表单的过程中,依旧对着字段和后端进行 CRUD,这其中的效率有可能提升吗?有什么规范能通用解决表单类的中后台需求呢?本文将从 JSON 格式出发,来探寻着其中的可能性。

JSON

JSON Schema & CRUD

JSON Schema 表单

JSON 2 Schem

背景

SCQA:在前后端分离架构下,JSON 格式被广泛用于前端的数据交互,并成为事实上的规范,但前端在编写表单的过程中,依旧对着字段和后端进行 CRUD,这其中的效率有可能提升吗?有什么规范能通用解决表单类的中后台需求呢?本文将从 JSON 格式出发,来探寻着其中的可能性。

对于这个问题,其实社区也有很不错的实现,比如:AForm, formio.js 等等,但这些往往是一些私有的协议,缺乏规范和标准,如何从规范出发,保持最大的兼容和面向未来编程,是我想追求的。

JSON

从官网 json.org [1],可以了解到对 JSON 的描述:

JSON (JavaScript Object Notation) is a lightweight data-interchange format.

JSON 是 JavaScript 对象的描述格式,是一种轻量的数据交换格式。优势有

方便人、机器的阅读(解析)、书写(生成)

文本格式,而非二进制或其他

completely language independent 和编程语言独立,且实现简单,因为只有两种结构

键值对

数组

为什么方便人阅读会是它的亮点呢?

我们可以通过 Java 对象序列化描述 的这个列子看到,使用 Java Serializable 接口,最终会被序列化为一个二进制文件,这对于机器来说,没太大问题,但对人来说,二进制的阅读简直是噩梦。

JSON Schema

从官网 json-schema.org [2],可以了解到对 JSON Schema 的描述:

​JSON Schema is a vocabulary that allows you to annotate and validate JSON documents.

它是用来声明和验证 JSON 数据的,它的优势有:

用来描述现有 JSON 数据的格式

提供对人、机器可读的文档格式

验证数据的合法性,如

自动化数据测试的合法性

检测客户端提交数据的合法性

JSON Schema & CRUD

有了 JSON Schema 这把利剑,他的主要场景是用来验证数据的合法性以及数据格式,看似和我们的背景无关,但想想 CRUD 的主要工作由以下几种:

提供数据表单

验证表单数据合法性

提交表单

其中第 2 步,JSON Schema 再合适不过了,方便服务端或客户端用来做数据合法性的校验,第 3 步,没太大工作量,使用网络库解决就行,那对于工作量最重的第 1 步,有什么解法呢?

从 JSON Schema 创建表单

很幸运,我们从官网实现列表中找了一份质量不错的实现,implementations , 剔除和框架绑定的,有以下几种,截止 20190828,各项目的 Star 数:

Alpaca Forms (ASL 2.0)【Star: 1074】

JSON Editor (MIT) 【Star: 1319】

JSON Form (joshfire) (joshfire) (MIT)【Star: 1813】

Json Forms (brutusin) (brutusin) (MIT)【Star: 451】

JSONForms (jsonforms.io) (EclipseSource) (MIT)【Star: 313】

uniforms (Vazco) (MIT)【Star: 753】

按 Star 数,优先选择前 3 个,由于第一个和第三个,和 jQuery 和相关 UI 库绑定,且 JSON Editor 相对较为独立,所以,我们选择 JSON Editor 来作为实验对象。

代码如下:

var element = document.getElementById('editor_holder');

var editor = new JSONEditor(element, {

schema: {

"type": "object",

"properties": {

"prop1": {

"type": "string"

},

"prop2": {

"type": "integer"

}

}

}

});

示例如下:

JSON 2 Schema

这么好用的 Schema,如何快速从数据中生成呢?在实现列表中,官网贴心地提供了这样的工具,这样我们能通过 JSON 数据,快速生成我们想要的表单,比如,我们定义了以下 JSON:

{

"hello": "world",

"array": [

{

"name": "pipe"

}

]

}

我们通过 jsonschema.net[3] 将上述数据转成 JSON Schema

通过这份 Schem,我们通过 JSON Editor 在线工具,一个 Form 表单就生成完毕了

References

JSON 官网:https://www.json.org/

JSON Schema 官网:http://json-schema.org/

JSON Schema From Data jsonschema.net

JSON Editor: https://json-editor.github.io/json-editor/

json schema多种形式_JSON Schema 简介相关推荐

  1. json schema多种形式_Json Schema简介

    1. 引言 什么是Json Schema? 以一个例子来说明 假设有一个web api,接受一个json请求,返回某个用户在某个城市关系最近的若干个好友.一个请求的例子如下: { "city ...

  2. json schema多种形式_Json Schema

    经常用 Python 写代码的同学应该都有一个感触,那就是 Python 对于字典的支持太舒服了,而且基本上可以和 JS 中写 Json 一样舒服.但是,因为 Python 对于 Dict 的支持比较 ...

  3. java schema校验_Json Schema 校验json,java代码示例

    Json Schema 校验json,java代码示例 1.json schema 入门请参考下面两篇博客 1.1Json Schema 快速入门 1.2Json Schema 简介 2.java代码 ...

  4. json schema多种形式_JsonSchema使用详解

    JSON Schema是一个用于验证JSON数据结构的强大工具, 我查看并学习了JSON Schema的官方文档, 做了详细的记录, 分享一下. 我们可以使用JSON Schema在后续做接口测试中做 ...

  5. Oracle Schema Objects(Schema Object Storage And Type)

    One characteristic of an RDBMS is the independence of physical data storage from logical data struct ...

  6. 一句话回复:关于'SqlMembershipProvider' requires a database schema compatible with schema version '1'...

    一个朋友说他建立好asp.net需要的membership-role关系后一直正常,后来运行了脚本,再运行时出现类似如下的错误 The 'System.Web.Security.SqlMembersh ...

  7. Creating schema using Saiku Schema Designer

    原文地址: http://wiki.meteorite.bi/display/SAIK/Creating+schema+using+Saiku+Schema+Designer Created by T ...

  8. json schema多种形式_什么是JSON Schema?

    什么是JSON Schema? 如果你曾经使用过XML Schema,RelaxNG或ASN.1,那么你很可能已经知道什么是JSON Schema,并且可以跳过本文的阅读.如果你是头一次听说,或者听过 ...

  9. json schema多种形式_什么是JSON Schema?及其应用方式......

    如果你曾经使用过XML Schema,RelaxNG或ASN.1,那么你很可能已经知道什么是JSON Schema,并且可以跳过本文的阅读.如果你是头一次听说,或者听过过这个词汇但不了解,那么你来对地 ...

最新文章

  1. 如何对DB2数据库做性能分析?
  2. mysql group by using filesort优化
  3. @MySQL的存储引擎
  4. 循环自相关函数和谱相关密度(四)——实信号、复信号模型下的QPSK信号循环谱推导
  5. 前端学习(100):float注意点整理1
  6. 1.4编程基础之逻辑表达式与条件分支 02 输出绝对值
  7. css 倒三角_改善CSS的10种最佳做法,帮助你从样式中获得最大的收益。
  8. 通过批处理来运行python程序
  9. 常用命令之svnadmin命令
  10. Spark的安装和使用方法
  11. java shiro教程_shiro教程1(HelloWorld)
  12. 波段高低点指标公式 k线高低点 大盘主图公式源码
  13. 功率因素校正(PFC)技术!
  14. 逆水寒2021最新服务器,逆水寒公布2021部分更新计划,写满了离经叛道
  15. 计算机一个小键盘按不出来怎么办,电脑小键盘打不出字怎么办?
  16. 嵌入式中串口、COM口、TTL、RS232、RS485的区别详解
  17. matplotlib调整坐标轴最小刻度单位,坐标轴主副刻度单位
  18. 在Ubuntu上搭建DDNS动态域名解析服务
  19. 分享一些超级有逼格的前端代码
  20. 光伏逆变器“核心器件”IGBT在光伏逆变器的应用

热门文章

  1. FL Studio中如何控制乐器力度?(如何画Midi CC控制器?)
  2. JavaScript -- Enumerator
  3. 在父div中使文字垂直居上、垂直居下
  4. C++模板编程Demo
  5. 人工智能政策再加码 中庆录播另辟新路径
  6. 一个优秀的标题是如何优化的?
  7. IT小团队管理者的突围之道
  8. c++工程 eclipse导入项目_在Eclipse中开发C/C++项目
  9. 使用samba服务器共享文件,samba服务器设置共享文件夹权限
  10. 如何解决animate运行时提示,应该为在运行时可能编辑的任何文本嵌入字体,具有使用设备字体设置的文本除外。“