【问题标题】:Parsing JSON like data interchange format解析 JSON 类数据交换格式
【发布时间】:2009-12-22 00:20:21
【问题描述】:

我想使用不使用引号的数据交换格式。也许是基于 JSON 的东西:

{
  param: value,
  param: value,
  param: {
    [{
      param: value,
      param: value
    }, {
      param: value,
      param: value
    }]
  }
}

我应该如何在 PHP 中解析类似的东西。应该通过正则表达式来做吗?

【问题讨论】:

  • 引号有什么问题?
  • 这听起来好像问题不在于引号,而是一些代码(可能基于正则表达式)在它们上产生错误。我建议修复损坏的代码,而不是尝试在其中硬塞不同的数据格式来掩盖问题。
  • 如果你的值包含逗号,你会怎么做?
  • 看着编辑后的版本(特别是“应该通过正则表达式来做吗?”),感觉我的猜测已经被证实了。
  • 有 json5,不带引号的名称、cmets、多行字符串,但字符串“值”仍然需要引号。 github.com/colinodell/json5

标签: php json data-structures standards


【解决方案1】:

让您的格式不使用引号有什么重要意义?有可能您可以更改其他内容以消除该要求(这会更好)。

就使用正则表达式解析类 JSON 格式而言,没有。这是一个糟糕的想法;正则表达式从来没有真正打算解析像 JSON 这样的递归结构。至少你会遇到许多正则表达式匹配的性能问题,你需要使用它来尝试处理递归;在最坏的情况下,您甚至会在尝试解决如何匹配和解析递归时遇到麻烦。

建议的格式也有其自身的问题:如何区分键值中的 ,{:,以及实际的 ,{ ,或: 这是格式的一部分?如何处理键名或值名中的空格?

【讨论】:

    【解决方案2】:

    为什么不使用 JSON 并利用可用的库和工具? This blog entry 详细介绍了 PHP 中的 JSON 解析器。

    要处理 JSON 数据,有 JSON 可用的 PHP 扩展 PHP 5.2.0 之后。两个功能: json_encode() 和 json_decode() 是 非常有用的转换和解析 通过 PHP 获取 JSON 数据。

    当有这么多定义明确且经过良好测试的可用选项(JSON、XML、Google 协议缓冲区、YAML)时,创建另一种格式似乎重复且容易出错。

    【讨论】:

    • 我知道,但我仍然认为这是一个糟糕的设计决策。也许有一个很好的理由来避免这些,但它没有被表达出来。
    • 你说的很对,但它并没有回答所问的问题。
    • 这是我在 StackOverflow 上最喜欢的一个技巧,我承认。有时被问的问题不是真正的问题
    • 类似地,“不要使用正则表达式解析 HTML”通常不会回答所问的问题。不过,这仍然是正确的答案。
    • 我并不是说你不应该这样做;我自己也给出了类似的答案。我只是指出来。
    【解决方案3】:

    您可以使用 XML 而不使用任何属性。您还需要避免使用带有引号的标题。

    【讨论】:

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