Rubberduck1337106092
Rubberduck1337106092

Reputation: 1344

How to Format JSON correctly Laravel 5.5

i'm trying to load events into a calendar.

Therefore i need to make a JSONstring with the event data but i can't figure out how to do this.

how i create the data:

$tickets = Ticket::where('mechanic_id', $request->mechanic_id)->get();

$tickets_json[] = [];

foreach($tickets as $ticket) {
    $tickets_json['title'] = $ticket->number;
    $tickets_json['start'] = $ticket->planned_timestamp_start->format('d-m-Y H:i');
    $tickets_json['end'] = $ticket->planned_timestamp_end->format('d-m-Y H:i');
    $tickets_json['url'] = '/tickets/' . $ticket->id;
}

This returns:

array:5 [▼
  0 => []
  "title" => "452"
  "start" => "27-10-2017 09:00"
  "end" => "27-10-2017 12:00"
  "url" => "/tickets/2"
]

This is not what i want and need.

I need it like this :

{
title: '63782136',
start: '27-10-2017 09:00',
end: '"27-10-2017 12:00"',
url: '/tickets/2'
},  
{
title: '23123',
start: '27-10-2017 09:00',
end: '"27-10-2017 12:00"',
url: '/tickets/3'
},  
{
title: '432512',
start: '27-10-2017 09:00',
end: '"27-10-2017 12:00"',
url: '/tickets/4'
},  

I have tried:

return response()->json($tickets_json);

But doesn't return the correct format:

#data: "{"0":[],"title":"452","start":"27-10-2017 09:00","end":"27-10-2017 12:00","url":"\/tickets\/2"}"

It adds {"0":[],} .

Thanks in advance.

Upvotes: 0

Views: 422

Answers (1)

tinyoverflow
tinyoverflow

Reputation: 2031

You're making the mistake of assigning your data to the first dimension of the array when you want it in the second dimension. The following should do the trick:

$tickets_json = [];

$tickets->each(function ($ticket) use (&$tickets_json) {
    $tickets_json[] = [
        'title' => $ticket->numer,
        'start' => $ticket->planned_timestamp_start->format('d-m-Y H:i'),
        'end' => $ticket->planned_timestamp_end->format('d-m-Y H:i'),
        'url' => '/tickets/' . $ticket->id
    ];
});

return $tickets_json;

This code will give you a proper formatted array which you can use to get the following JSON output:

[
    {
        "title": "63782136",
        "start": "27-10-2017 09:00",
        "end": "27-10-2017 12:00",
        "url": "/tickets/2"
    },  
    {
        "title": "23123",
        "start": "27-10-2017 09:00",
        "end": "27-10-2017 12:00",
        "url": "/tickets/3"
    }
]

Upvotes: 3

Related Questions