【问题标题】:Using javascript, how convert to JSON, Java-POJO-like classes?使用 javascript,如何转换为 JSON、Java-POJO 类?
【发布时间】:2014-10-13 11:27:08
【问题描述】:

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

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

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

更新 #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;
}

【问题讨论】:

  • 是的,这是个好主意,但我不知道如何使这个方法与内部对象递归(在我的例子中,Bet,SingleBet[])!
  • 我是说如果可能的话,整个 POJO 的事情都应该用模块模式来实现。 addyosmani.com/resources/essentialjsdesignpatterns/book/… 虽然我从未尝试过 json-ize
  • 你为什么在Javascript中使用getter和setter???
  • @jan 我想实现一个类似 Java 的应用程序并像处理 Java 应用程序一样处理它。我不知道这是不是个好主意!

标签: javascript json pojo stringify


【解决方案1】:

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

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

【讨论】:

  • 好的,非常感谢!我可以放弃该方法的一般性,但是如何修复此解决方案以使用 POJO 本身的字段?
  • @valerio 这是一个更难解决的问题,因为这需要您提供一种构建(可能)递归数组结构的方法......这有一些问题,因为如果你不这样做t 克隆你的结构,它将允许从外部进行修改。
  • 我听从了您的建议,稍作修正!谢谢。更新#1
猜你喜欢
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多