2009-11-06 110 views
1

我一直想弄清楚如何使用PHP将多个JSON文件重新格式化为一个单一的文件,但是我很难理解如何使用复杂的正则表达式。假设我哈德以下JSON数据的多个实例:PHP - 正则表达式来重新格式化JSON

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

比方说我有这个JSON对象的两个实例在PHP脚本,并希望建立一个单一的JSON对象,结合从两侧的“猫”的对象我有两个独立的JSON实例,删除了“犬”对象。该文件我最终要的是这样的:

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

有谁知道,我也许可以剪接,并结合使用PHP的正则表达式这些JSON对象?

谢谢。

+0

任何人都可能提供一个关于如何使用关联数组来组合这两个对象的例子? – minimalpop 2009-11-06 05:01:59

回答

3

为什么你不使用json_encode & json_decode做php数组的工作似乎是更容易,然后用正则表达式来做到这一点。

+0

我认为这将是最好的办法。 +1 – alex 2009-11-06 04:55:54

1

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

1

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

但是,真的,有没有理由你需要在JSON本身做到这一点?并与正则表达式?您可能会更容易地将数据反序列化为真正的PHP数据结构,并合并/操纵那些内容。然后,当你完成后,重新序列化结果。

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" 
      } 
     ] 
    } 
}