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

作json转换用

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

执行前,按需更改文件

示例

  1. var topname="Data";
  2. var defaulttype="string";
  3. var bson=true; //对应 mongodb
  4. var json=true; //http response
  5. var scheme=false; //http request->scheme
  6. var jdata={
  7. "_id" : "564d5162e54b3106fb7badea",
  8. "macs" : [
  9. "00-21-26-00-C8-B0"
  10. ],
  11. "time" : 1447907400,
  12. "timestr" : "2015-11-19 12:30",
  13. "shop":{
  14. "name":"shop1"
  15. }
  16. };
  17.  
  18. String.prototype.firstToUpperCase=function(){
  19. return this[0].toUpperCase()+this.substring(1);
  20. }
  21. var fun=(function(){
  22. var otherobj=[];
  23. var goobjstring="";
  24. function getStruct(data,collectionname){
  25. goobjstring+="type "+collectionname.firstToUpperCase()+" struct {\n";
  26. var per="\t";
  27. for(var key in data){
  28. var newkey=key.firstToUpperCase();
  29. goobjstring+=per +newkey+" "+getType(data[key],key);
  30. if (json||bson||scheme){
  31. goobjstring+=' `';
  32. var temparr=[]
  33. if (json){
  34. temparr.push('json:"'+key+'"');
  35. }
  36. if (bson){
  37. temparr.push('bson:"'+key+'"');
  38. }
  39. if (scheme){
  40. temparr.push('scheme:"'+key+'"');
  41. }
  42. goobjstring+=temparr.join(" ");
  43. goobjstring+='`';
  44. }
  45. goobjstring+="\n";
  46. }
  47. goobjstring+="}\n";
  48. while (otherobj.length>0){
  49. var subobj=otherobj.pop();
  50. getStruct(subobj.obj,subobj.key)
  51. }
  52. return goobjstring
  53. }
  54. function getType(obj,key){
  55. var type=defaulttype;
  56. if(obj){
  57. switch(obj.constructor)
  58. {
  59. case Array:
  60. type="[]"+getType(obj[0]||"",key.firstToUpperCase()) ;
  61. break;
  62. case Object:
  63. otherobj.push({key:key,obj:obj});
  64. type=key.firstToUpperCase()
  65. break;
  66. case String:
  67. type="string"
  68. break;
  69. case Number:
  70. type="int"
  71. break;
  72. case Boolean:
  73. type="bool"
  74. break;
  75. default :
  76. }
  77. }
  78. return type;
  79. }
  80. return getStruct
  81. })()
  82.  
  83. console.log(fun(jdata,topname))

结果

  1. 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. D语言-运算符

    Part 0:概念 表达式:表达式是由非赋值运算符或特殊运算符和值组成的,每个表达式都可以计算出一个值 Part 1:非赋值运算符 §1.1 基本的运算符 基本的运算符有+,-,*,/,% 我相信你除 ...

  2. 吴裕雄--天生自然 JAVASCRIPT开发学习: 变量提升

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. UML-什么是GRASP?

    1.定义 GRASP:General Responsibility Assignment Software Pattern,即通用职责分配软件模式,使用职责进行OO设计的学习工具. 2.本书目标 1) ...

  4. 寒假day14

    今天去医院看脸了,回来继续写论文.

  5. 【leetcode困难】968. 监控二叉树

    968. 监控二叉树 瞎**分析评论区Rui大佬的答案,这题想直接递归return min还是有坑的,分计数和状态.有个状态转换的思想

  6. faster rcnn 源码学习-------数据读入及RoIDataLayer相关模块解读

    参考博客:::https://www.cnblogs.com/Dzhen/p/6845852.html 非常全面的解读参考:::https://blog.csdn.net/DaVinciL/artic ...

  7. 计蒜客 方程的解数(DFS)

    问题描述 输出格式 输出一行,输出一个整数,表示方程的整数解的个数. 样例输入 - 样例输出 #include <stdio.h> #include <string.h> #i ...

  8. SpringSecurity过滤器顺序

    https://blog.csdn.net/qq_35720307/article/details/97656608 org.springframework.security.config.annot ...

  9. 祘头君的字符(DFS)

    一.题目 有n名选手在玩游戏,他们每个人有一个字符,每个字符都有自己固定的若干个特征.特征的种类数为k.每个人的特征为特征总集的一个子集. 两个字符的相似度定义为:如果两个字符A和B同时拥有某个特征或 ...

  10. macbook 一些php相关操作

    开启php: https://jingyan.baidu.com/article/67508eb434539f9cca1ce4da.html 配置多虚拟主机:  https://jingyan.bai ...