2015-10-25 2 views
1

У меня есть два объекта JSON, и я хочу, чтобы он был объединен в один объект JSON. Я не хочу, чтобы данные JSON были перезаписаны. Я хочу, чтобы данные были объединены.Слияние двух объектов JSON с PHP?

Объект № 1: (example1.json)

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

Объект № 2: (example2.json)

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

}] 

Это PHP File В настоящее время я являюсь используя:

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

Solutions оценили. Я новичок в Stackoverflow, поэтому извините за мое плохое форматирование, если оно есть. Заранее спасибо :)

+0

Год выпуска не соответствует данным объектам. Это верно? Если да, значит ли это, что вы всегда должны получать более высокое значение года выпуска при совпадении заголовков при слиянии? –

+0

Я в замешательстве, вы не хотите переписывать данные, вы хотите объединить, но результат, о котором вы просите, явно переписывается, а не просто слияния? – adeneo

+0

перезаписан: [{ "Название": "уу", "ReleaseYear": "2017" }] Поскольку существует только один объект, он переписывает, и объединяет вторые данные в одиночку. Это то, что я имел в виду как переписывание. –

ответ

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; 
} 
+0

Прежде всего, спасибо за ваш ответ. Ну, я запустил его, и он дал мне этот результат: array (0 => array ('title' => 'xx', 'releaseYear' => '2014',), 1 => array ('title' = > 'yy', 'releaseYear' => '2017',),) Вот что мне нужно. Но могу ли я получить его в формате JSON? Как: [{ "Название": "хх", "ReleaseYear": "2014" }, { "Название": "уу", "ReleaseYear": "2017" }] Позже , эти данные будут проанализированы в Android с помощью Volley, и он не распознает этот тип данных, вот почему. Спасибо заранее –

+1

см. Http://docs.php.net/json_encode – VolkerK

+0

Спасибо за решение @VolkerK. Простой Google помог мне получить его в формате JSON. Используется echo json_encode ($ data); вместо var_export ($ data); Еще раз спасибо, если вы свободны, скажите мне, как использовать var_export :) –

Смежные вопросы