0

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...

3
  • No code, no JSON that you start with? Commented Apr 27, 2017 at 14:45
  • You need to post some JSON that you start with for help, and ideally some code. Commented Apr 27, 2017 at 14:56
  • I modified my question guys :) Commented Apr 27, 2017 at 14:58

1 Answer 1

2

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"
    }
}
Sign up to request clarification or add additional context in comments.

1 Comment

It works, thank you. I think I needed the $output->{$key} expression, I didn't know how to do that. Thanks again ! :)

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.