简体   繁体   中英

How to merge 2 json files in PHP, of which 1 is an array

I have created json in PHP from different tables. 1 json object returned is an array. How can I merge both with the second one being a sub array of the first. I want to send this as a single json to Xamarin forms (android) with a single get

PHP array merge gives Argument 2 is not an array

Json1
{
    "employeeid": "1123",
    "employeename": "EMP 001 NAME",
    "mMacID": "E0138",
    "machinename": "FOS",
    "iscleaning": 1,
    "isperforming": 1,
    "isverifying": 1,
    "cSeqno": 1,
    "cMacID": "E0138",
    "cInterval": 112,
    "cCleanOperationMaxTime": 300,
    "cPerformOperationMaxTime": 600,
    "oSequenceID": 6,
    "oMacID": "E0138",
    "oItemNumber": " ",
    "oBatchNumber": " ",
    "oPONumber": " ",
    "oCompletedOperation": 0,
    "oComplOperStartTime": 0,
    "oCompOperEndndTime": 0,
    "oOperationToContinue": 1
}

Json2 (Array)
[
    {
        "pMachineID": "E0138",
        "pmachinetoLocationSequence": 1,
        "pLocationNumber": 1,
        "pLocationName": "TestLoc1",
        "pLocationInterval": 12,
        "pImageRequiredForVerifying": 1,
        "pErrorFound": 0
    },
    {
        "pMachineID": "E0138",
        "pmachinetoLocationSequence": 1,
        "pLocationNumber": 2,
        "pLocationName": "TestLoc2",
        "pLocationInterval": 15,
        "pImageRequiredForVerifying": 0,
        "pErrorFound": 0
    },
    {
        "pMachineID": "E0138",
        "pmachinetoLocationSequence": 1,
        "pLocationNumber": 3,
        "pLocationName": "TESTLOC3",
        "pLocationInterval": 18,
        "pImageRequiredForVerifying": 0,
        "pErrorFound": 0
    },
    {
        "pMachineID": "E0138",
        "pmachinetoLocationSequence": 1,
        "pLocationNumber": 1,
        "pLocationName": "LOC1",
        "pLocationInterval": 12,
        "pImageRequiredForVerifying": 0,
        "pErrorFound": 0
    }
]

I want the second in as an array in the first.

Simply decode the 2 JSON String and then add the arrays to the class like this

$js1 = '{
    "employeeid": "1123",
    "employeename": "EMP 001 NAME",
    "mMacID": "E0138",
    "machinename": "FOS",
    "iscleaning": 1,
    "isperforming": 1,
    "isverifying": 1,
    "cSeqno": 1,
    "cMacID": "E0138",
    "cInterval": 112,
    "cCleanOperationMaxTime": 300,
    "cPerformOperationMaxTime": 600,
    "oSequenceID": 6,
    "oMacID": "E0138",
    "oItemNumber": " ",
    "oBatchNumber": " ",
    "oPONumber": " ",
    "oCompletedOperation": 0,
    "oComplOperStartTime": 0,
    "oCompOperEndndTime": 0,
    "oOperationToContinue": 1
}';

$js2 = '[
    {
        "pMachineID": "E0138",
        "pmachinetoLocationSequence": 1,
        "pLocationNumber": 1,
        "pLocationName": "TestLoc1",
        "pLocationInterval": 12,
        "pImageRequiredForVerifying": 1,
        "pErrorFound": 0
    },
    {
        "pMachineID": "E0138",
        "pmachinetoLocationSequence": 1,
        "pLocationNumber": 2,
        "pLocationName": "TestLoc2",
        "pLocationInterval": 15,
        "pImageRequiredForVerifying": 0,
        "pErrorFound": 0
    },
    {
        "pMachineID": "E0138",
        "pmachinetoLocationSequence": 1,
        "pLocationNumber": 3,
        "pLocationName": "TESTLOC3",
        "pLocationInterval": 18,
        "pImageRequiredForVerifying": 0,
        "pErrorFound": 0
    },
    {
        "pMachineID": "E0138",
        "pmachinetoLocationSequence": 1,
        "pLocationNumber": 1,
        "pLocationName": "LOC1",
        "pLocationInterval": 12,
        "pImageRequiredForVerifying": 0,
        "pErrorFound": 0
    }
]';

$j1 = json_decode($js1);
$j2 = json_decode($js2);

// You may want to give this a more sensible name than `theArrays`
$j1->theArrays = $j2;

print_r($j1);

$new_json_string = json_encode($j1);

echo $new_json_string;

RESULT of print_r($j1)

stdClass Object
(
    [employeeid] => 1123
    [employeename] => EMP 001 NAME
    [mMacID] => E0138
    [machinename] => FOS
    [iscleaning] => 1
    [isperforming] => 1
    [isverifying] => 1
    [cSeqno] => 1
    [cMacID] => E0138
    [cInterval] => 112
    [cCleanOperationMaxTime] => 300
    [cPerformOperationMaxTime] => 600
    [oSequenceID] => 6
    [oMacID] => E0138
    [oItemNumber] =>  
    [oBatchNumber] =>  
    [oPONumber] =>  
    [oCompletedOperation] => 0
    [oComplOperStartTime] => 0
    [oCompOperEndndTime] => 0
    [oOperationToContinue] => 1
    [theArrays] => Array
        (
            [0] => stdClass Object
                (
                    [pMachineID] => E0138
                    [pmachinetoLocationSequence] => 1
                    [pLocationNumber] => 1
                    [pLocationName] => TestLoc1
                    [pLocationInterval] => 12
                    [pImageRequiredForVerifying] => 1
                    [pErrorFound] => 0
                )

            [1] => stdClass Object
                (
                    [pMachineID] => E0138
                    [pmachinetoLocationSequence] => 1
                    [pLocationNumber] => 2
                    [pLocationName] => TestLoc2
                    [pLocationInterval] => 15
                    [pImageRequiredForVerifying] => 0
                    [pErrorFound] => 0
                )

            [2] => stdClass Object
                (
                    [pMachineID] => E0138
                    [pmachinetoLocationSequence] => 1
                    [pLocationNumber] => 3
                    [pLocationName] => TESTLOC3
                    [pLocationInterval] => 18
                    [pImageRequiredForVerifying] => 0
                    [pErrorFound] => 0
                )

            [3] => stdClass Object
                (
                    [pMachineID] => E0138
                    [pmachinetoLocationSequence] => 1
                    [pLocationNumber] => 1
                    [pLocationName] => LOC1
                    [pLocationInterval] => 12
                    [pImageRequiredForVerifying] => 0
                    [pErrorFound] => 0
                )

        )

)

You can use json_decode and array_merge to approach this

$json1ToArray = json_decode($json1, true);
$json2ToArray = json_decode($json2, true);
$res = array_merge($json1ToArray, $json2ToArray);
print_r($res); 

Live Demo

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM