如何使Json.stringify忽略某些类成员?

如何使Json.stringify忽略某些类成员?,json,haxe,Json,Haxe,我正在使用最新的Haxe和HaxeFlixel制作一个简单的游戏原型 我有以下课程 class GameData { public var playerHealth: Int; public var playerScore: Int; public var levelName: String; public function new(playerHealth: Int = 0, playerScore: Int = 0, levelName: Stri

我正在使用最新的Haxe和HaxeFlixel制作一个简单的游戏原型

我有以下课程

class GameData
{
    public var playerHealth: Int;
    public var playerScore: Int;    

    public var levelName: String;

    public function new(playerHealth: Int = 0, playerScore: Int = 0, levelName: String = "")
    {
        this.playerHealth = playerHealth;
        this.playerScore = playerScore;

        this.levelName = levelName;
    }
}
我将其转换为JSON,如下所示

Json.stringify(new GameData(64, 512, "Level 1"));

有没有办法让stringify忽略某些成员?

haxe.Json
没有排除字段的机制,因此我建议使用第三方库。在这里,您可以简单地用
@:jignored
注释应该忽略的字段:

@:jignored
public var levelName:String;
  • 在序列化后删除不需要的字段-这似乎有点老套,因为由于额外的
    Json.parse()
    Json.stringify()
    调用,它会带来很多不必要的开销:

    var json = Json.stringify(new GameData(100, 10, "Level 1"));
    var data:haxe.DynamicAccess<String> = Json.parse(json);
    data.remove("levelName");
    json = Json.stringify(data);
    trace(json); // {"playerHealth":100,"playerScore":10}
    
    var json=json.stringify(新游戏数据(100,10,“1级”);
    var数据:haxe.DynamicAccess=Json.parse(Json);
    数据。删除(“levelName”);
    json=json.stringify(数据);
    跟踪(json);//{“玩家健康”:100,“玩家核心”:10}
    

    • haxe.Json
      没有排除字段的机制,因此我建议使用第三方库。在这里,您可以简单地用
      @:jignored
      注释应该忽略的字段:

      @:jignored
      public var levelName:String;
      
    • 在序列化后删除不需要的字段-这似乎有点老套,因为由于额外的
      Json.parse()
      Json.stringify()
      调用,它会带来很多不必要的开销:

      var json = Json.stringify(new GameData(100, 10, "Level 1"));
      var data:haxe.DynamicAccess<String> = Json.parse(json);
      data.remove("levelName");
      json = Json.stringify(data);
      trace(json); // {"playerHealth":100,"playerScore":10}
      
      var json=json.stringify(新游戏数据(100,10,“1级”);
      var数据:haxe.DynamicAccess=Json.parse(Json);
      数据。删除(“levelName”);
      json=json.stringify(数据);
      跟踪(json);//{“玩家健康”:100,“玩家核心”:10}
      

    根据您的具体情况,可能需要对标准库的JsonPrinter做一个稍微修改的版本-例如,在GMEdit中,我允许JSON对象有一个
    hxOrder:Array
    字段,如果提供该字段,它将确定打印的字段顺序,并初始化为静态数组。您可以为字段包含/排除制定类似的方案。

    根据您的具体情况,可能需要对standard library的JsonPrinter做一个稍微修改的版本-例如,在GMEdit中,我允许JSON对象具有一个
    hxOrder:Array
    字段,如果提供了该字段,将确定打印的字段顺序,并初始化为静态数组。您可以为字段包含/排除制定类似的方案。

    没有真正考虑序列化只包含所需字段的结构,非常感谢您的帮助!我真的没有想过序列化一个只包含所需字段的结构,非常棒,谢谢你的帮助!