【问题标题】:PHP - regex to reformat JSONPHP - 重新格式化 JSON 的正则表达式
【发布时间】:2010-12-13 17:02:54
【问题描述】:

我一直试图弄清楚如何使用 php 将多个 JSON 文件重新格式化为一个文件,但我很难理解如何使用复杂的正则表达式。假设我拥有以下 JSON 数据的多个实例:

{
    "felines": {
        "cats": [
            {
                "age": 7,
                "name": "frank" 
            },
            {
                "age": 4,
                "name": "popeye" 
            } 
        ] 
    },
    "canines": {
        "dogs": [
            {
                "age": 2,
                "name": "lucy" 
            },
            {
                "age": 12,
                "name": "wilson" 
            } 
        ] 
    }
}

假设我在 php 脚本中有这个 JSON 对象的 2 个实例,并且想要创建一个 JSON 对象,它将我拥有的两个单独的 JSON 实例中的两个“猫科动物”对象组合在一起,删除“犬科动物”对象。我最终想要的文件如下所示:

{
    "felines": {
        "cats": [
            {
                "age": 7,
                "name": "frank" 
            },
            {
                "age": 4,
                "name": "popeye" 
            } 
        ] 
    },
    "felines": {
        "cats": [
            {
                "age": 6,
                "name": "sam" 
            },
            {
                "age": 4,
                "name": "kelly" 
            } 
        ] 
    }
}

有谁知道我如何能够使用 php 将这些 JSON 对象与正则表达式拼接和组合?

谢谢。

【问题讨论】:

  • 谁能提供一个例子来说明如何使用关联数组来组合这两个对象?

标签: php regex json


【解决方案1】:

为什么不使用json_encodejson_decode 来处理php 数组似乎比使用正则表达式更容易。

【讨论】:

  • 我认为这是最好的方法。 +1
【解决方案2】:

我怀疑这是您应该尝试使用正则表达式解决的问题。考虑将 JSON 文件转换为关联数组,进行合并,然后改回 JSON。

【讨论】:

    【解决方案3】:

    一般来说,正则表达式在处理任意嵌套的上下文(如 JSON 数据、HTML 标记、编程语言等)方面非常糟糕。一些扩展的正则表达式库修补了这些缺陷。

    但是,真的,您需要在 JSON 本身中执行此操作吗?和正则表达式?您可能会非常轻松地将数据反序列化为真正的 PHP 数据结构,并在那里合并/操作事物。然后,完成后,重新序列化结果。

    【讨论】:

      【解决方案4】:

      最好的方法是按照 RageZ 的建议,使用 json_encode 和 json_decode,但是 JSON 不允许您使用相同的键名,是吗?你能得到的最好的应该是这样的:

      {
          "felines": {
              "cats": [
                  {
                      "age": 7,
                      "name": "frank"
                  },
                  {
                      "age": 4,
                      "name": "popeye"
                  },
                  {
                      "age": 6,
                      "name": "sam"
                  },
                  {
                      "age": 4,
                      "name": "kelly"
                  }
              ]
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 2023-02-04
        • 1970-01-01
        • 2013-04-28
        • 1970-01-01
        相关资源
        最近更新 更多