Используя javascript, как конвертировать в JSON, Java-POJO-подобные классы?

Я хочу использовать классы, подобные Java-POJO, в своем JS-проекте: только частные поля, геттеры и сеттеры.

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), потому что поля закрыты. Поэтому я думаю использовать рекурсивный метод, подобный этому...

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

... но прежде чем я потрачу много времени на его написание, я хочу спросить вас, существует ли лучший способ преобразовать объект, подобный Java-POJO, в JSON. Спасибо.

Обновление №1

Мне стыдно за себя! Это мое рабочее (но абсолютно временное) решение:

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 += ',\n  "bettableEvents" : [ ' + bettableEventsString + " ] ";
    result += " } "

    return result;
}

person valerio    schedule 13.10.2014    source источник
comment
Да, это хорошая идея, но я не знаю, как сделать этот метод рекурсивным с внутренним объектом (в моем примере Bet, SingleBet[])!   -  person valerio    schedule 13.10.2014
comment
я говорил, что вся эта штука POJO должна быть реализована с шаблоном модуля, если это возможно. addyosmani.com/resources/essentialjsdesignpatterns/book/ я никогда не пытался использовать json-ize хотя   -  person argentum47    schedule 13.10.2014
comment
Почему вы используете геттеры и сеттеры в Javascript???   -  person John Dvorak    schedule 13.10.2014
comment
@jan Я думал реализовать Java-подобное приложение и обращаться с ним так же, как с Java. Не знаю, хорошая ли это была идея!   -  person valerio    schedule 13.10.2014


Ответы (1)


Единственный простой способ, который я могу придумать, это добавить метод экспорта:

this.toJSON = function() {
    return JSON.stringify({
        homeTeam: homeTeam,
        awayTeam: awayTeam,
        id: id,
        // etc...
    });
}
person Ja͢ck    schedule 13.10.2014
comment
Хорошо, действительно спасибо! Про универсальность метода я могу поспорить, но как исправить это решение для работы с полями, которые сами являются POJO? - person valerio; 13.10.2014
comment
@valerio Эту проблему решить сложнее, потому что для этого потребуется предоставить метод, который строит (потенциально) рекурсивную структуру массива ... с этим есть некоторые проблемы, потому что, если вы не клонируете свои структуры, это позволит модификации сделано снаружи. - person Ja͢ck; 13.10.2014
comment
Я последовал вашему совету с небольшой поправкой! Спасибо. Обновление №1 - person valerio; 13.10.2014