2014-10-13 6 views
0

JS 프로젝트에서 Java-POJO와 같은 클래스를 사용하고 싶습니다. 개인 필드, getter 및 setter 만 사용할 수 있습니다.자바 스크립트를 사용하여 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 계열 클래스를 JSON 문자열로 변환하여 서버로 전송합니다. 필드가 private이기 때문에 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; 
} 

생각 ...하지만 내가 그것을 쓰는 많은 시간을 할애하기 전에 나는 자바 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; 
} 
+0

어떻게 폐쇄에 대해? – argentum47

+0

예, 좋은 생각입니다. 그러나이 메소드를 내부 객체로 재귀 적으로 만드는 방법을 모르겠습니다. (예제에서는 Bet, SingleBet [])! – valerio

+0

가능하다면이 POJO 전체가 Module 패턴으로 구현되어야한다고 말하고있었습니다. 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