简体   繁体   中英

Create nested JSON with dynamic keys with PHP

I get some data from an API call and I try to construct a JSON to send it back to another API.

The final JSON must look like this:

{
    "jobs": {
        "MP_OFFER_ID_1": {
            "job_id": "jobboard_reference_1",
            "url": "url_1",    
            "status": 0
        },
        "MP_OFFER_ID_2": {
            "job_id": "job_id_2",
            "url": "url_2",
            "status": 1
        },
    }
}

So under the jobs key, it's not an array of elements but a list of elements with unique keys.

And that's what I'm having trouble to get.

The data I want to parse is in an array structured like this:

Array(
    [0] => Array(
        [link] => some-url
        [id] => 18790674
        [ref] => 0015909-18790674
    )
    // ...
);

link has to be placed in the url key of the JSON.

id is the JSON key, in the examples it's MP_OFFER_ID_1 etc

ref has to be placed in job_id

I actually have this JSON at the end:

{
    "jobs": [
        [
            {
                "18790674": {
                    "job_id": "0015909-18790674",
                    "url": "test",
                    "status": 1
                }
            },
            {
                "18790678": {
                    "job_id": "0015892-18790678",
                    "url": "test",
                    "status": 1
                }
            }
        ]
    ]
}

As you can see, jobs is an array (actually it's an array of array ^^) and that's not what I want here...

I came up with this, but it was very difficult to understand what exactly you want from the very limited info in question:

<?php
$input = [
  [
    'id' => 18790674,
    'link' => 'some-url',
    'ref' => '0015909-18790674',
  ],
  [
    'id' => 18790678,
    'link' => 'another-url',
    'ref' => '0015909-18790678',
  ],
];

$output = new stdClass();

foreach ($input as $arr) {
  $obj = new stdClass();

  $key = $arr['id'];
  $obj->job_id = $arr['id'];
  $obj->url = $arr['link'];
  $obj->status = '1'; // ?

  $output->{$key} = $obj;

}

echo json_encode($output, JSON_PRETTY_PRINT);

Output:

{
    "18790674": {
        "job_id": 18790674,
        "url": "some-url",
        "status": "1"
    },
    "18790678": {
        "job_id": 18790678,
        "url": "another-url",
        "status": "1"
    }
}

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