json转换为go类文件,js脚本,nodejs执行

js写的代码生成脚本,json生成对应的go type对象

作json转换用

js脚本无甚何依赖,可以直接运行

执行前,按需更改文件

示例

var topname="Data";
var defaulttype="string";
var bson=true; //对应 mongodb
var json=true; //http response
var scheme=false; //http request->scheme
var jdata={
    "_id" : "564d5162e54b3106fb7badea",
    "macs" : [
        "00-21-26-00-C8-B0"
    ],
    "time" : 1447907400,
    "timestr" : "2015-11-19 12:30",
    "shop":{
        "name":"shop1"
    }
};

String.prototype.firstToUpperCase=function(){
    return this[0].toUpperCase()+this.substring(1);
}
var fun=(function(){
    var otherobj=[];
    var goobjstring="";
    function getStruct(data,collectionname){
        goobjstring+="type "+collectionname.firstToUpperCase()+" struct {\n";
        var per="\t";
        for(var key in data){
            var newkey=key.firstToUpperCase();
            goobjstring+=per +newkey+" "+getType(data[key],key);
            if (json||bson||scheme){
                goobjstring+=‘ `‘;
                var temparr=[]
                if (json){
                    temparr.push(‘json:"‘+key+‘"‘);
                }
                if (bson){
                    temparr.push(‘bson:"‘+key+‘"‘);
                }
                if (scheme){
                    temparr.push(‘scheme:"‘+key+‘"‘);
                }
                goobjstring+=temparr.join(" ");
                goobjstring+=‘`‘;
            }
            goobjstring+="\n";
        }
        goobjstring+="}\n";
        while (otherobj.length>0){
            var subobj=otherobj.pop();
            getStruct(subobj.obj,subobj.key)
        }
        return goobjstring
    }
    function getType(obj,key){
        var type=defaulttype;
        if(obj){
            switch(obj.constructor)
            {
                case Array:
                    type="[]"+getType(obj[0]||"",key.firstToUpperCase()) ;
                    break;
                case Object:
                    otherobj.push({key:key,obj:obj});
                    type=key.firstToUpperCase()
                    break;
                case String:
                    type="string"
                    break;
                case Number:
                    type="int"
                    break;
                case Boolean:
                    type="bool"
                    break;
                default :
            }
        }
        return type;
    }
    return getStruct
})()

console.log(fun(jdata,topname))

结果

type Data struct {   _id string `json:"_id" bson:"_id"`   Macs []string `json:"macs" bson:"macs"`   Time int `json:"time" bson:"time"`   Timestr string `json:"timestr" bson:"timestr"`   Shop Shop `json:"shop" bson:"shop"`}type Shop struct {   Name string `json:"name" bson:"name"`}

代码是之前辅助go 开发写的

go的web框架

https://github.com/cclient/gowebframework

代码路径

https://github.com/cclient/gowebframework/blob/master/tool/code.js

时间: 2024-10-01 13:30:42

json转换为go类文件,js脚本,nodejs执行的相关文章

Ajax中主页加载分页面后,分页面js脚本不执行的解决办法

没看懂,稍后再看 Ajax中主页加载分页面后,分页面js脚本不执行的解决办法 最近捣鼓JQuery,其中强大的Ajax系列函数令人印象深刻,所以做项目时毫不犹豫地采用了一下该技术,在主页中动态加载分页面进来,咋看效果 不错,都能实现了第一层次的加载,但深入下去问题就出来了:动态加载进来的页面中外联了js文件,其中的脚本却没有在加载后运行! (脚本在单独浏览该分页面时运行是正常的) 我郁闷了,打开Firefox中的Firebug查看了加载后的主页面中的DOM,所有元素的加载都是正常的啊~ 自己改来

JS脚本不能执行

这段时间在做前端的动态页面,出了很多问题,因为js平时用的很少,所以花了不少无用功. 其中有两点一定要注意: 1.当js中有语法错误时,js脚本会无法执行. 2.当js脚本中有未定义的变量时,后边的语句不能执行. JS脚本不能执行

chrome禁用某个网站js脚本的执行

1 首先打开谷歌浏览器.如下 2 点击右上角,打开菜单进入[设置] 3 打开后,第一个界面是没有这个的,要滚动到最后点击[显示高级设置...] 4 展开第二页后,点击[隐私设置]->[内容设置]如图: 5 然后找到 [javascript]部分,这里就是我们要设置的,我们看到,下面有两个选项,如果我们只禁止某些网站的js,就默认选择第一项.点击[管理例外情况] 6 然后会出现如下图,我们把想要禁用js的网址填上,后面选择禁止,然后点确定,设置完成,这回你再查看这个网站,会发现清爽了很多,浏览速度

前端性能之非阻塞加载js脚本

SCRIPT标签的阻塞行为会对页面的性能产生影响,这是因为浏览器在下载脚本.解析.执行的过程中不会同时做其他事情,比如渲染页面.响应用户事件等.之所以这样做是因为正在执行的JavaScript代码可能会改变页面元素.修改样式.添加或者删除事件等各种操作,以及最关键的脚本之间的依赖性,浏览器必须等待当前执行的脚本执行完成之后再进行后续操作. 脚本阻塞 两种加载方式 HTML页面中的JavaScript脚本有两种方式加入 - 使用script标签内联到HTML页面,页面按从上到下的顺序执行到scri

动态调试JS脚本文件

动态调试JS脚本文件:(JS源映射 - sourceURL)与 debugge 问题描述: 当你以动态的方式加载 JS 文件的时候(就是动态加载JS脚本),你就会发现,调试这个加载后的动态JS太过于费劲了,很难调试,那么,以下方案帮你搞定! 解决方式1:sourceURL(源映射)—> //@ sourceURL=b.js //@ sourceURL=quarterEvaluation.js PS: @符号和 sourceURL间必须有空格,否则达不到效果.!!! @符号和 sourceURL间

js把String类转换为日期类并计算

//计算日期加法 function DateAdd(interval, number, date) { switch (interval) { case "y": { date.setFullYear(date.getFullYear() + number); return date; break; } case "q": { date.setMonth(date.getMonth() + number * 3); return date; break; } cas

折腾一两天,终于学会使用grunt压缩合并混淆JS脚本,小激动,特意记录一下+spm一点意外收获

很长时间没有更新博客了,实在是太忙啦...0.0 ,以下的东西纯粹是记录,不是我原创,放到收藏夹还担心不够,这个以后常用,想来想去,还是放到这里吧,,丢不了..最后一句废话,网上搜集也好原创也罢,能解决问题不糊弄人才是真道理! 反正我的问题解决啦!!!哈哈哈!! 安装grunt 原文:www.bluesdream.com/blog/Windows-installs-the-grunt-and-instructions.html 怕这个网址打不开,记录下: 安装Grunt:如果你之前安装过老的0.

node面试题之---对比JS和NodeJS的区别

区别: 1.JS运行在浏览器端,用于用户的交互效果,NodeJS运行在服务器端,用于服务器的操作,例如,Web服务器创建,数据库的操作,文件的操作等 2.JS运行在浏览器端,存在多个JS解释器,存在兼容性的问题,而NodeJS只有V8引擎一种解释器,不存在兼容性问题 3.两者都有内置对象,自定义对象,有不同的宿主对象 词语解释(js为例): js的内置对象.自定义对象,和宿主对象 javascript中的内置对象有:Array.Boolean.Date.Function.Global.Math.

nodejs(第三篇):nodejs中的文件模块、nodejs中的require与exports、http模块补充、JavaScript Standard Style

一.nodejs中的文件模块 在nodejs中,用户自己编写的模块,称为文件模块. 文件模块,则是指js文件.json文件或者是.node文件.在引用文件模块的时候后要加上文件的路径:/.../.../xxx.js表示绝对路径../xxx.js表示相对路径(同一文件夹下的xxx.js),../表示上一级目录.如果既不加/.../.../又不加./的话,则该模块要么是核心模块,要么是从一个node_modules文件夹加载. (1)在Node.js中,require是一个方法,只有通过requir