【问题标题】:Generate a python parser for a particular JSON format为特定的 JSON 格式生成 python 解析器
【发布时间】:2016-06-10 21:57:55
【问题描述】:

我使用的是文件格式。该格式实际上是具有特定结构的 JSON。该格式带有一个非常棒的验证器,并提供有用的错误消息。但是,当错误导致输入为无效 JSON 时,验证器会失败,并给出非常糟糕的错误消息。

我可以将它与普通的 JSON 验证器一起使用,但我真正想做的是能够将 JSON 结构放入工具中,并从另一端获取 (python) 解析器。显然有多种方法可以做到这一点,我的问题是:有什么方法可以定义 JSON 格式,让我避免为 JSON 本身编写解析器?

用例是这样的:我想为格式构建一个“适当的”验证器,以便用户可以上传他们的文件并对其进行检查。我可以只编写 BNF,但我想为一个理解它是 BNF-within-JSON 的工具编写 BNF。

【问题讨论】:

  • 如果他们向您发送无效的 JSON,除了无效之外,他们还需要知道什么吗?只需使用普通的json.loads 来检查它是否是有效的 JSON。
  • 你知道 JSON 代表什么吗? JavaScript Object Notation,它已经是一种表示法,只有一个有效的“格式”。格式良好的 JSON 对象可以使用内置模块 json from json import loadloads(jsonObjectAsString) 进行解析
  • 也很难猜出你想做什么。通常你想用 json 模块或 jsonpickle 解析 json 然后检查你的数据的有效性
  • @Alex,JSON 模式,看起来很像完美的答案 - 谢谢。
  • @AlexHall - 您愿意将您的评论作为答案,以便我接受吗?

标签: python json validation parsing


【解决方案1】:

断言 JSON 文件遵循特定格式的适当方法是使用 JSON schema。许多语言都支持这一点,并且在 Python 中有很好的库。还有一些有用的在线工具可用于生成、验证和测试架构。

【讨论】:

    【解决方案2】:

    如果我理解正确,验证器使用 json 库来读取文件,然后进行一些额外的检查。这对我来说听起来是个好设计;为什么要重新发明轮子?如果无效的 JSON 给出的错误消息过于神秘,那么如何在 try ... except 块中捕获它们并以您自己的方式制定错误消息?除了异常消息之外,您还可以通过检查异常来恢复有关错误的大量信息。

    如果您可以更具体地说明您认为哪种错误消息没有帮助以及您希望看到什么(通过合适的输入触发错误),也许有人可以解释一下。

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多