0

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.

1

5 Answers 5

1

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.

Sign up to request clarification or add additional context in comments.

1 Comment

If the question is Unclear, the correct response to the question would be to close as Needs Clarification.
0

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

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

Comments

0

Merge the results and then encode.

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

2 Comments

$xmlDoc is a simpleDOM Object
plus: you can use array_merge_recursive if you can have overload
0

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);
    }

Comments

0

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?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.