使用javascript,如何转换为类似Java-POJO的JSON类?

Using javascript, how convert to JSON, Java-POJO-like classes?

我想在我的JS项目中使用类似Java-POJO的类:仅私有字段,getter和setter。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function Event() {
var homeTeam;
var awayTeam;
var id;
var singleBets = [];
var bet;

...

this.getHomeTeam = function(){
    return homeTeam;
}
this.setHomeTeam = function(data){
    homeTeam = data;
}

this.getAwayTeam = function(){
    return awayTeam;
}
this.setAwayTeam = function(data){
    awayTeam = data;
}

this.getId = function(){
    return id;
}
this.setId = function(data){
    id = data;
}

this.getSingleBets = function(){
    return singleBets;
}
this.setSingleBets = function(data){
    singleBets = data;
}

this.getBet = function(){
    return bet;
}
this.setBet = function(data){
    bet = data;
}

}

我可以将我的类似于Java-POJO的类转换为JSON字符串以将其发送到服务器。
我不能使用JSON.stringify(myClass),因为这些字段是私有的。
所以我想使用像这样的递归方法...

1
2
3
4
5
6
7
8
9
10
var myJsonParse = function(data){
    var result ="";
    for(var propertyName in data) {
        var method = propertyName;
        if (method.substring(0,3)=="get"){
            ... data[propertyName].call() ...
        }
    }
    return result;
}

...但是在我花很多时间写它之前,我想问你是否存在一种更好的方法来转换JSON中的类似于Java-POJO的对象。
谢谢。

更新#1

我为自己感到羞耻! 这是我的工作(但绝对是临时的)解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
this.toJSON = function() {
    var bettableEventsString =  [];
    for (var i = 0, len = bettableEvents.length; i < len; i++) {
        bettableEventsString[i] = bettableEvents[i].toJSON();
    }
    var result = JSON.stringify({
        userId: userId,
        championshipDayId: championshipDayId,
        championshipDayName: championshipDayName
    });

    result = result.substring(0, result.length-1);
    result += ',
 "bettableEvents" : [ '
+ bettableEventsString +" ]";
    result +=" }"

    return result;
}


我能想到的唯一简单方法是添加导出方法:

1
2
3
4
5
6
7
8
this.toJSON = function() {
    return JSON.stringify({
        homeTeam: homeTeam,
        awayTeam: awayTeam,
        id: id,
        // etc...
    });
}