是否可以在不使用递归的情况下编写JSON解析器?

时间:2010-07-20 15:23:10

标签: json recursion parsing

是否可以在不使用递归的情况下编写JSON解析器?如果是,你会建议采用什么方法?

2 个答案:

答案 0 :(得分:4)

可以使用等效的迭代实现重现任何递归代码。

这个问题很好地描述了这一点:Is it possible to remove recursion from this function?

答案 1 :(得分:1)

我同意James - 理论上可以使用迭代方法实现任何递归代码。引用链接上描述的堆栈方法是有效选项。另一种方法是你可以硬编码到n深度,然后明显的风险就是限制在这个深度。

在不了解您尝试运行JSON处理代码的环境和约束的情况下,很难说哪种方法最适合。有些事情需要考虑:

  • 如果您可以管理递归代码通常更容易理解(并且几乎所有语言中99%的示例都与之兼容以处理JSON)
  • 使用固定深度的迭代代码可以“更高效”,因为它不需要使用尽可能多的堆栈,但不能很好地扩展到n - 深度场景
  • 基于堆栈的代码可以处理n - 深度场景,但可能不像其他程序员那样直观

此外,可以线性化树结构(JSON的对象图是隐式的,假设仅数组可以具有“数组”的虚拟根)。这允许平流处理方法。如果您更进一步注入人工标记,例如DOWNUP,它可以非常清晰。这是编译器设计和语言分析中出现的问题,但在这里可能有用。