PHP - 正则表达式重新格式化JSON

时间:2009-11-06 04:16:03

标签: php regex json

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

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

假设我在php脚本中有2个这个JSON对象的实例,并且想要创建一个JSON对象,该对象结合了我拥有的两个独立JSON实例中的“猫”对象,删除了“犬”对象。我最终想要的文件看起来像这样:

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

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

感谢。

4 个答案:

答案 0 :(得分:3)

为什么不使用json_encode& json_decode使用正则表达式执行php数组的工作似乎要容易得多。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

但是,真的,你有没有理由在JSON中做到这一点?还有正则表达式?你可能会有更多的 更容易将数据反序列化为真正的PHP数据结构,并在那里合并/操作。然后,当您完成后,重新序列化结果。

答案 3 :(得分:0)

最好的方法就像RageZ建议的那样,使用json_encode和json_decode,但是JSON不允许你拥有相同的密钥名称,是吗?你能得到的最好的就是:

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