给json字段加上注释,或者更好

2019-06-01  本文已影响0人  Godan

MySQL加入了JSON支持,NoSQL的特性,让我们多了一种应对业务快速增长的方法,不过使用JSON后,就不能像表字段那样方便的加入注释,对于团队协作开发、后期维护无疑是个障碍。最近发现利用 json schema 技术可以给JSON加上注释,甚至可以生成可视化UI编辑器,对于需要手动维护JSON字段的人来说简直就是福音。说了这么多,还不知是何物,不如一起来看看。


json-editor

图中,最右边是我们存储在数据表中的格式,中间是自动生成的编辑UI,而最左边就是需要额外定义的 json schema。举个例子,假如储存这样的结构在表中:

{
  "histories": {
    "tv":[
      {"title": "切尔诺贝利", "type": "美剧", "cur": 3, "at_time": "18m14s"},
      {"title": "爵迹临界天下", "type": "国产剧", "cur": 19,  "at_time": "42m54s"}
    ],
    "area": "CN" 
  }
}

我们不能给其中的JSON字段加上注释,比如 curat_time表达的意思并不清晰,协同工作时,必然会增加额外的沟通成本。当修改JSON对象的某个值时,手动编辑json也很容易出错,毕竟JSON也只是阅读方便,大量编辑起来也很容易出错。

设想一下,我们的JSON数据有个图形可编辑界面,可以将每个字段的具体含义显示出来,并且便于编辑和保存,就最好不过了。用传统的方式实现,需要为每个不同的JSON结构设计用户界面,还得将各个字段正确的显示在界面上……开发成本过高,还不如手动修改简便,毕竟我们更想用一种方式解决这件事。但是,如果不用我们设计界面,只写配置,就能自动生成UI,再实现读写数据库,建立数据与配置的对应关系,就能实现我们的设想,用一种方式达到目的,倒也挺划算。让我们看看自动生成的UI效果


使用json-editor效果

看起来不错,不过界面上完全隐藏了真实的JSON字段,如果我们需要明确JSON字段,也完全可以通过调整配置达到目的。

通过title与description增强对应关系

这完全达到我的预期,现在只需要编辑 json-schema 就能制定出各种JSON结构的UI,至于 json-schema 的格式就像这样。

{
    "type": "object",
    "title": "当JSON遇上UI",
    "properties": {
        "histories": {
            "title": "histories",
            "type": "object",
            "description": "编辑用户历史",
            "properties": {
                "tv": {
                    "title": "tv",
                    "type": "array",
                    "format": "table",
                    "description": "电视剧",
                    "uniqueItems": true,
                    "items": {
                        "type": "object",
                        "properties": {
                            "title": {
                                "type": "string",
                                "title": "title 名称",
                                "options": {
                                    "inputAttributes": {
                                        "placeholder": "爵迹临界天下"
                                    }
                                }
                            },
                            "type": {
                                "type": "string",
                                "title": "type 类型",
                                "default": "国产剧",
                                "enum": [
                                    "美剧",
                                    "国产剧"
                                ]
                            },
                            "cur": {
                                "title": "cur 更新至",
                                "type": "integer",
                                "mininum": 1,
                                "default": 1
                            },
                            "at_time": {
                                "title": "at_time 播放至",
                                "type": "string",
                                "options": {
                                    "inputAttributes": {
                                        "placeholder": "10m32s"
                                    }
                                }
                            }
                        }
                    }
                },
                "area": {
                    "title": "area",
                    "description": "所在地区",
                    "type": "string",
                    "default": "CN"
                }
            }
        }
    }
}

现在,我再也不需要为JSON注释和编辑烦恼,json-editor 让我解脱(已飘

PS:汉化请修改 json-editor/src/default.js,我自译的土味英语就不分享了。

// 复制一份 JSONEditor.defaults.languages.en 并翻译到字符串中
JSONEditor.defaults.languages.zh = {
  /**
   * When a property is not set
   */
  error_notset: "必须设置属性",
  /**
   * When a string must not be empty
   */
  error_notempty: "必填值",
  // ...
}

// 翻译完别忘记修改默认语言
// Translation strings and default languages
JSONEditor.defaults.default_language = 'zh';

// grunt 编译后就是汉化版了

Bye~

上一篇下一篇

猜你喜欢

热点阅读