2014-10-13 2 views
0

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

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-like в строку 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. Спасибо.

Update # 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; 
} 
+0

как насчет закрытия? – argentum47

+0

Да, это хорошая идея, но я не знаю, как сделать этот метод рекурсивным с внутренним объектом (в моем примере Bet, SingleBet [])! – valerio

+0

Я говорил, что вся эта вещь POJO будет реализована с использованием шаблона модуля, если это возможно. http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript Я никогда не пытался json-ize, хотя – argentum47

ответ

0

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

this.toJSON = function() { 
    return JSON.stringify({ 
     homeTeam: homeTeam, 
     awayTeam: awayTeam, 
     id: id, 
     // etc... 
    }); 
} 
+0

Хорошо, спасибо! Я могу отказаться от общности метода, но как я могу исправить это решение для работы с полями, которые сами POJO? – valerio

+0

@valerio Это сложнее решить, потому что это потребует от вас предоставления метода, который создает (потенциально) рекурсивную структуру массива ... есть некоторые проблемы с этим, потому что, если вы не клонируете свои структуры, это позволит модификации сделаны извне. –

+0

Я последовал твоему совету с небольшой коррекцией! Благодарю. Обновление # 1 – valerio