【问题标题】:Implementing a JSON parser [closed]实现 JSON 解析器 [关闭]
【发布时间】:2015-11-09 18:13:31
【问题描述】:

这个问题与实现语言无关。

在最近的一次采访中,我被要求编写一个 JSON 解析器: 我得到的输入如下所示:

 {
      'key1': 'value1',
      'key2': [key21, key22]
    }

虽然听起来很简单,但我被难住了,因为我不知道如何编写解析器(顺便说一句,我知道 JSON.parse() 方法)。

问题是编写自己的解析器。

上面的 JSON 格式不正确并不重要。如果不是,解析应该抛出错误。

谁能指出我可以用来解决这个问题的一些技术。

【问题讨论】:

  • 那不是有效的 JSON
  • javascript 还是 java?您是否尝试过对此进行研究?
  • 正如 epascarello 指出的那样,这不是有效的 JSON。请参阅json.org 获取有效的 json。如果您只想解析 JSON,请使用现成的库。如果您只想创建要解析的代码,请使用 BNF 来解析代码生成器,使用 json.org 页面右侧的 BNF 类语法。另一方面,如果您将此作为家庭作业,那么您可能应该与您的助教一起了解您需要学习的内容。
  • 我找到了一个足够简单的起点raw.githubusercontent.com/douglascrockford/JSON-js/master/…谢谢大家的投入

标签: javascript java json


【解决方案1】:

基本上,您首先必须逐个字符地扫描字符串,以便将其分成标记。

  • {} 是令牌。我们称它们为“START_OBJECT”和“END_OBJECT”;
  • [] 也是令牌。我们称它们为“START_ARRAY”和“END_ARRAY”;
  • :, 也是令牌。我们称它们为“冒号”和“逗号”;
  • 'key1''key2''value1' 是“STRING_CONSTANT”标记,其值就是字符串本身;
  • key21key22IDENTIFIER 令牌,其值为 'key21' 和 'key22'

解析过程的初始部分,将源代码分解为标记,称为“词法分析”,是解析过程的第一步。

下一步将是“句法分析”,您将从标记序列中找出源代码的实际结构。

【讨论】:

    猜你喜欢
    • 2014-01-30
    • 2012-08-12
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多