Narjis
Narjis

Reputation: 27

merging json objects in php

how can i merge two json objects in php one of array is like this

$arr_data = array('id'=>$country_id);
    $arr = json_encode($arr_data);

and another one is like this:

$arr_places = json_encode($xmlDoc);

now I want to merge them into a single json object. How can I do this.

Upvotes: 0

Views: 3917

Answers (5)

Ameer Pichan
Ameer Pichan

Reputation: 1

The above mentioned solution is not working for me with PHP version 5.5.12

What I want to is in short append to json strings and form one json string out of it, as explained below:

$str1 = {
    timestamp: "2015-04-03T08:08:51+00:00",
    user: "admin",
    src_ip: "127.0.0.1"
}

$str2 =  {
    timestamp: "2015-04-03T08:08:51+00:00",
    user: "Peter_x",
    src_ip: "127.0.0.1"
}

$value1 = json_decode ($str1, TRUE);
$value2 = json_decode ($str2, TRUE);
$combined = array_merge ($value1, $value2);
$combined_json = json_encode ($combined);
file_put_contents("c:\outputfile", $combined_json, FILE_APPEND);

The result is:

{
    "timestamp": "2015-04-03T08:08:51+00:00",
    "user": "admin",
    "src_ip": "127.0.0.1",
}
{
    "timestamp": "2015-04-03T08:08:51+00:00",
    "user": "Peter_x",
    "src_ip": "127.0.0.1",
}

Instead I expect one single json string. Firefox fails to parse it. What surprises me is that in the resulting string the keys are within quotes. (e.g: "timestamp").

Can any one tell me what is wrong with the code or how to join the two json strings to one?

Upvotes: 0

Milen
Milen

Reputation: 1530

Most of the answers here assume that this is a case where one is confronted with two arrays, rather than objects. OP was asking about merging two objects into a single JSON.

While there are many solutions to this, I've got a hack that goes a step further and actually merges the objects into a single JSON string by converting the objects to JSON strings, then back to associative arrays, and then back to JSON.

Could be an efficiency fail, but does the job :-) Here's a code sample:

    /**
     * Merges two objects into a single JSON structure
     * @param object $obj1
     * @param object $obj2
     * @return string the resuling JSON string
     */
    function mergeToJSON($obj1, $obj2) {
        $json1 = json_encode($obj1);
        $json2 = json_encode($obj2);
        if ($json1 === FALSE OR $json2 === FALSE) {
            return "";
        }
        $array1 = json_decode($json1, TRUE);
        $array2 = json_decode($json2, TRUE);
        $data = array_merge($array1, $array2);
        return json_encode($data);
    }

Upvotes: 0

Tomas Ramirez Sarduy
Tomas Ramirez Sarduy

Reputation: 17471

Merge the results and then encode.

$arr_data = array('id'=>$country_id);
$res = array_merge( $arr_data, $xmlDoc );
$merged = json_encode($res);

Upvotes: 0

Ronald Yeung
Ronald Yeung

Reputation: 176

It depends very much on what you mean by "merge". Just a plain merge or you will need to eliminate the duplicated attributes?...etc.

The simplest way is just like what xdazz mentioned.

Upvotes: 1

xdazz
xdazz

Reputation: 160853

So you should merge the array first and then use json_encode.

$json = json_encode(array_merge($arr_data, $xmlDoc));

Upvotes: 0

Related Questions