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

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

  1. Visual Studio 2015 将json转换为实体类

    最新写的一个接口需要接收json参数,然后序列化为实体类然后再进行后面的逻辑处理.因为json中键值对比较多,逐一去手写实体中的每个属性太麻烦,于是寻思是否有这样的工具可以将json转换为实体类. 经 ...

  2. JS脚本不能执行

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

  3. js脚本中执行java后台代码

    使用场景:关闭页面弹窗时执行sql语句. 其实js里执行sql语句有多种方式. 方式一:直接在js代码里调用sql语句,原则上不能使用,因为这将sql直接暴露在客户端,安全性极差. 方式二:在js里运 ...

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

      1 首先打开谷歌浏览器.如下 2 点击右上角,打开菜单进入[设置] 3 打开后,第一个界面是没有这个的,要滚动到最后点击[显示高级设置...] 4 展开第二页后,点击[隐私设置]->[内容设 ...

  5. chrome浏览器控制台创建js脚本并执行

    Chrome的snippets是小脚本,还可以创作并在Chrome DevTools的来源面板中执行.您可以访问和从任何页面运行它们.当你运行一个片段,它从当前打开的页面的上下文中执行.本文主要讲如何 ...

  6. 【笔记】JS脚本为什么要放在body最后面以及async和defer的异同点

    1.没有defer或async 浏览器遇到脚本的时候会暂停渲染并立即加载执行脚本(外部脚本),"立即"指的是在渲染该 script 标签之下的文档元素之前,也就是说不等待后续载入的 ...

  7. C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题

    C#字符串数组排序   //排序只带字符的数组,不带数字的 private   string[]   aa   ={ "a ", "c ", "b & ...

  8. grunt concat针对有依赖文件的js脚本的合并

    grunt concat针对有依赖文件的js脚本的合并: 在一个入口文件index.js里,有很多依赖文件,主要分两类,一类是和主文件同目录,另一类是其他目录下的js(cmd.非cmd的js文件,一般 ...

  9. js脚本 将本地图片路径转换为html

    公司业务类似于电商, 因此有很多纯图片展示的商品详情页, 类似淘宝店商品页面下的多个图片组成的商品详情页, 页面很简单, 就是一大串img标签, 但是每次做详情页都要配合emmet一顿操作( 如下图 ...

随机推荐

  1. UVALive 3942 字典树+dp

    其实主要是想学一下字典树的写法,但这个题目又涉及到了DP:这个题目要求某些单词组成一个长子串的各种组合总数,数据量大,单纯枚举复杂度高,首先肯定是要把各个单词给建成字典树,但是之后该怎么推一时没想到. ...

  2. 京东云携手Mellanox,设计最先进SDN硬件加速功能并开源

    京东云携手Mellanox,设计最先进SDN硬件加速功能并开源 最新技术播报 京东云开发者社区  导语新一代 SDN.NFV 和云原生计算技术正在推动应用实例的极限,这些实例可以在虚拟化和容器化的服务 ...

  3. Block实现代理/通知效果

    例子1:A控制器->跳转—>B控制器 , 假设想从B控制器回传数组给A控制器 实现:B控制器.h文件定义一个block参数,.m文件执行block,A控制器设置block内容 B.h文件/ ...

  4. tensorflow 损失计算--MSN

    1.tf.losses.mean_squared_error函数 tf.losses.mean_squared_error( labels, predictions, weights=1.0, sco ...

  5. TF分布式问题

    碰到一个没解决的问题. 用tensorflow 分布式异步更新模式训练模型, 模型中带正则项, 每个batch的损失函数为 \[\lambda \|W\|_1 + \frac 1 {N_j} \sum ...

  6. electron-builder打包跳过publish

    默认情况下执行 npm run release使用build命令打包时自动将打包好的安装程序发布到仓库,有时候不需要每次打包都上传到仓库,这时我们只需要在build命令后面加上参数-p never 即 ...

  7. ZJNU 2212 - Turn-based game

    Mr.Lee每隔1/x s攻击一次,cpu每隔1/y s攻击一次 因为时间与答案无关,最后只看boss受到了多少次攻击 所以可以在每个人的频率上同时乘以xy 即Mr.Lee每隔y s攻击一次,cpu每 ...

  8. 1.windows-oracle实战第一课

    一.oracle是目前最流行的数据库之一,功能强大.性能卓越.学习要有信心.oracle也做软件,不仅仅是数据库.比如ERP(企业资源计划,用友.金蝶) 二.目前的数据库   相对而言:       ...

  9. split - 拆分文件

    拆分文件 # 每个文件的行数为1000行 split -l 1000 test.txt # 将test文件拆分,20M一个文件 split -b 20M test.txt test文件拆分,并且文件名 ...

  10. SQL服务器攻击总结-注入

    查库选择convert(int,db_name())sysobjects 查当前表id,从sysobjects中选择id,xtype ='u'//此处要记录下数据库的id syscolumns查表对应 ...