美文网首页
给json字段加上注释,或者更好

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

作者: Godan | 来源:发表于2019-06-01 00:57 被阅读0次

    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~

    相关文章

      网友评论

          本文标题:给json字段加上注释,或者更好

          本文链接:https://www.haomeiwen.com/subject/aavktctx.html