javascript json转为 go struct 小工具代码

/**
 * Created by cdpmac on 15/10/20.
 */
var topname="Ap";
var jdata={
    "item": {
        "id": "55b71c374d65c9b50212d4ba",
        "contactName": "",
        "industries": [
            "生活服务",
            "小区"
        ],
        "hello":[
            {word:1},
            {word:2},
            {word:3}
        ],
        "coordinates": {
            "lat": 39.7229,
            "lng": 116.342
        }
    }
};
var defaulttype="string";



var otherobj=[];

String.prototype.firstToUpperCase=function(){
    return this[0].toUpperCase()+this.substring(1);
}
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)+' `json:"'+key+'" bson:"'+key+'"`'+"\n"
    }
    goobjstring+="}\n";
    while (otherobj.length>0){
        var subobj=otherobj.pop();
        getStruct(subobj.obj,subobj.key)
    }
}


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;
}

getStruct(jdata
    ,topname)
console.log(goobjstring);

 

执行结果

type Ap struct {
    Item Item `json:"item" bson:"item"`
}
type Item struct {
    Id string `json:"id" bson:"id"`
    ContactName string `json:"contactName" bson:"contactName"`
    Industries []string `json:"industries" bson:"industries"`
    Hello []Hello `json:"hello" bson:"hello"`
    Coordinates Coordinates `json:"coordinates" bson:"coordinates"`
}
type Coordinates struct {
    Lat int `json:"lat" bson:"lat"`
    Lng int `json:"lng" bson:"lng"`
}
type Hello struct {
    Word int `json:"word" bson:"word"`
}

 

posted @ 2015-11-05 14:33  cclient  阅读(455)  评论(0编辑  收藏  举报