【问题标题】:Merging two JSON objects with PHP?用 PHP 合并两个 JSON 对象?
【发布时间】:2015-10-25 14:16:19
【问题描述】:

我有两个 JSON 对象,我希望将其合并为一个 JSON 对象。我不希望 JSON 数据被覆盖。我希望数据被合并

对象 #1:(example1.json)

[{
    "title": "xx",        
    "releaseYear": "2014",        
},
{
    "title": "yy",       
    "releaseYear": "2015"        
}]

对象 #2:(example2.json)

[{
    "title": "yy",       
    "releaseYear": "2017"

}]

这是我目前正在使用的 PHP 文件

    <?php

    $jsonString = file_get_contents('example.json');
    $jsonString2 = file_get_contents('example2.json');   
    $data = json_decode($jsonString, true);
    $data2 = json_decode($jsonString2, true);      


    $op = array_merge_recursive( $data, $data2 );

    $resJson = json_encode($op);
    file_put_contents('example3.json', $resJson);   

收到的输出:(example3.json)

[  
   {  
      "title":"xx",
      "releaseYear":"2014"
   },
   {  
      "title":"yy",
      "releaseYear":"2015"
   },
   {  
      "title":"yy",
      "releaseYear":"2017"
   }
]    

所需输出:

[{
    "title": "xx",        
    "releaseYear": "2014"        
},
{
    "title": "yy",       
    "releaseYear": "2017"        
}]

解决方案赞赏。我是 Stackoverflow 的新手,很抱歉我的格式错误(如果有的话)。在此先感谢:)

【问题讨论】:

  • 发布年份与给定对象不匹配。这个对吗?如果是这样,这是否意味着您在进行合并时总是必须在匹配标题上采用更高的发布年份值?
  • 我一头雾水,你不想覆盖数据,你想合并,但是你要求的结果显然是覆盖,而不仅仅是合并?
  • Overwritten: [{ "title": "yy", "releaseYear": "2017" }] 由于只有一个对象,它覆盖并单独合并第二个数据。这就是我所说的覆盖。

标签: php json


【解决方案1】:

许多可能的解决方案。一个例子:

<?php
$data = json_decode('[{"title": "xx","releaseYear": "2014"},{"title": "yy","releaseYear": "2015"}]', true);
$data2 = json_decode('[{"title": "yy","releaseYear": "2017"}]', true);

$data = foo($data, 'title');
$data = foo($data2, 'title', $data);
$data = array_values($data);
var_export($data);

function foo($src, $prop, $target=array()) {
    foreach($src as $o) {
        $target[ $o[$prop] ] = $o;
    }
    return $target;
}

【讨论】:

  • 首先,感谢您的回答。好吧,我运行了它,它给了我这个输出: array ( 0 => array ( 'title' => 'xx', 'releaseYear' => '2014', ), 1 => array ( 'title' => 'yy', 'releaseYear' => '2017', ), ) 这就是我需要的。但我能以 JSON 格式获取它吗? like: [{ "title": "xx", "releaseYear": "2014" }, { "title": "yy", "releaseYear": "2017" }] 后面会在 Android 中用 Volley 解析这些数据,它不识别那种类型的数据,这就是原因。在此先感谢:)
  • 感谢@VolkerK 的解决方案。一个简单的谷歌帮助我以 JSON 格式获取它。使用 echo json_encode($data);而不是 var_export($data);再次感谢,如果你有空,请告诉我使用 var_export :)
  • 我只是比 var_dump 更喜欢输出;-) 您可以复制 var_export 的输出并将其(按原样)粘贴回 php 脚本中,以将其用作示例数据。跨度>
猜你喜欢
  • 2018-01-14
  • 1970-01-01
  • 2021-07-21
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
相关资源
最近更新 更多