【问题标题】:How to represent a tree in string format?如何以字符串格式表示树?
【发布时间】:2019-08-01 18:18:06
【问题描述】:

让我们以这一系列动作为例:

第 1 行:1. Rxe8+ Rxe8 2. Qxe8# 第 2 行:1. Qxe8+ Rxe8 2. Rxe8#

我可以用 JSON 来表示:

{
  'Rxe8+': {
    'Rxe8': {
      'Qxe8#': {}
    }
  },
  'Qxe8+': {
    'Rxe8': {
      'Rxe8#': {}
    }
  }
}

你能建议一种简单的格式来指定字符串中的这种组合行吗?

【问题讨论】:

  • 这真的是您要使用的格式吗?嵌套对象的嵌套对象真的很长?
  • 为什么不为每一行使用一个空格(或任何其他分隔符)分隔的字符串?还是数组?
  • 就字符串格式而言,除非您要使用加密或压缩算法,否则我同意@NinaScholz - 如此频繁地使用 csv 类型格式是有原因的。无论您使用何种分隔符,它们都易于阅读、导入/导出和编辑。最好不要想太多,保持简单。
  • 井线可以像树一样有子线@NinaScholz
  • JSON 是树结构的字符串表示。 XML 也是树结构的字符串表示。还有许多其他不太为人所知的,例如 S 表达式。为什么需要新的东西?

标签: javascript json xml format


【解决方案1】:

这样做的一个好方法是覆盖 JSON 功能(JSON.stringify 将隐式调用 .toJSON),因此您可以定义一个自定义的并使用它。

var sequence = "1. Rxe8+ Rxe8 2. Qxe8#";

function MoveList(sequence){
    this.sequence = sequence;
}
MoveList.prototype.toJSON = function(){ 
 var moveSet = {};
 var moves = this.sequence.split(" ");
 for(var i = 0; i < moves.length; i+=3){
     var moveNumber = moves[i];
     var whiteMove = moves[i+1];
     var blackMove = moves[i+2];
     moveSet[moveNumber] = {
      "White" : whiteMove
     };
     if(blackMove) moveSet[moveNumber].Black = blackMove;
 }
 return moveSet;
};

var ml = new MoveList(sequence);
var mlJson = JSON.stringify(ml);
console.log(mlJson); // As actual JSON
console.log(JSON.parse(mlJson)); // back in object form

【讨论】:

    【解决方案2】:

    由于我不太明白您在问什么,我相信您正在寻找原生 Javascript 函数 JSON.parse https://www.w3schools.com/js/js_json_stringify.asp

    var stringifiedJson = JSON.stringify({hello: "test"});
    

    变量 stringifiedJson 将返回 {"hello": "test"}。 如果您可能正在寻找如何用文本而不是编程语言来表示某些东西,请尝试使用 XML。 https://www.w3schools.com/xml/.

    <Rxe8+>
        <Rxe8>
            <Qxe8#>
            </Qxe8#>
        </Rxe8>
    </Rxe8+>
    

    等等

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多