JSON datatable php

1

I'm having trouble with my json, I'm not finding him around. My code is this:

$salida = '{"data": [';
$paso = false; 
$i=0;
foreach ($cirugias as $cirugia) {
if ($paso){
    $salida .= ','; 
}
$salida .= '[';     
$salida .= '"'.strtoupper(normaliza($cirugia['Especialidad'])).'",';
$salida .= '"'.($cirugia['quirofano']==''?'Z':$cirugia['quirofano']).'",';
$salida .= '"'.$cirugia['HC'].'",';
$salida .= '"'.$cirugia['paciente'].'",';
$salida .= '"'.$cirugia['Edad'].'",';
$salida .= '"'.$cirugia['Procedimiento'].'",';
if($cirugia['Cirujano2']==''){
    $salida .= '"'.$cirugia['Cirujano'].'",';
}else{
    $salida .= '"'.$cirugia['Cirujano2'].'",';
}   
if($cirugia['Observacion2']==''){
    $salida .= '"'.trim(str_replace("\t"," ",str_replace("\r\n", ' ',$cirugia['Observacion']))).'",';
}else{
    $salida .= '"'.trim(str_replace("\t"," ",str_replace("\r\n", ' ',$cirugia['Observacion2']))).'",';
}   
$salida .= '"'.$cirugia['MinutosDuracion'].'",';
if($cirugia['quirofano']==''){
    $salida .= '"'."<center><a class='btn btn-danger btn-xs' href='javascript: asignarQuirofano(".$i.",".$cirugia['ganoregi'].",".$cirugia['gnumregi'].")'>Asignar</a></center>".'",';
}else{
    $salida .= '"'."<center><div class='btn-group' role='group' aria-label='...'><a class='btn btn-success btn-xs' href='javascript: getAsignacion(".$i.",".$cirugia['ganoregi'].",".$cirugia['gnumregi'].")'>".$cirugia['quirofano']."&nbsp;&nbsp;<i class='fa fa-pencil'></i></a><a class='btn btn-danger btn-xs' href='javascript: anularAsignacion(".$i.",".$cirugia['ganoregi'].",".$cirugia['gnumregi'].")'><i class='fa fa-trash'></i></a></div>".'</center>'.'",';
}

if($cirugia['EstadoProgramacion']=='Cancelada'){
$salida .= '"'."<i title='".$cirugia['EstadoProgramacion']."' class='fa fa-ban' style='color: #f00;'></i>".'",';
}else{
$salida .= '"'."<i title='".$cirugia['EstadoProgramacion']."' class='fa fa-clock-o' style='color: #f6bb42;'></i>".'",'; 
}
$salida .= '"'.$cirugia['cama'].'",';
$salida .= '"'.$cirugia['Peso'].'",';
$salida .= '"'.getTime($cirugia['desde']).'",';
$salida .= '"'.$cirugia['rx'].'",';
$salida .= '"'.$cirugia['Insumo'].'",';
$salida .= '"'.$cirugia['horaingreso'].'"';
$salida .= ']';
$paso = true; 
$i++;
}
$salida .= ']}';
echo $salida;
?>

Everything works fine but when I check json I skip this error:

  

Error: Parse error on line 3: ... TO 14: 00HS "," 240 "," Assign   ","
  ----------------------- ^ Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', ' [', got' undefined '

What strikes me is that before it worked correctly, I only added one more field:

$salida .= '"'.$cirugia['Insumo'].'",';

I appreciate the help very much. Greetings

    
asked by GAL 22.05.2017 в 21:54
source

1 answer

2

Would not it be more convenient to use json_encode() ?

You create the data in an ordinary PHP object or matrix and at the end of your code you generate the JSON from the PHP data:

/* Creamos el elemento raíz (objeto) */
$salida = new \stdClass();
/* Generamos la propiedad "data" con un array vacío */
$salida->data = [];
foreach ($cirugias as $cirugia) {
  /* Creamos el array "elemento" con los datos iniciales */
  $elemento = [
    strtoupper(normaliza($cirugia['Especialidad'])),
    ($cirugia['quirofano']==''?'Z':$cirugia['quirofano']),
    $cirugia['HC'],
    $cirugia['paciente'],
    $cirugia['Edad'],
    $cirugia['Procedimiento'],
  ];
  /* Dependiendo de ciertas condiciones agregaremos unos valores y otros
    al array "elementos"  con array_push */
  if ($cirugia['Cirujano2']=='') {
    array_push($elemento, $cirugia['Cirujano']);
  } else {
    array_push($elemento, $cirugia['Cirujano2']);
  }   
  if ($cirugia['Observacion2'] == '') {
    array_push($elemento, $cirugia['Observacion']);
  } else {
    array_push($elemento, $cirugia['Observacion2']);
  }
  /* Agregamos un valor único (sin condición if) */
  array_push($elemento, $cirugia['MinutosDuracion']);
  if($cirugia['quirofano'] == '') {
    array_push($elemento, "<center><a class='btn btn-danger btn-xs' href='javascript: asignarQuirofano(".$i.",".$cirugia['ganoregi'].",".$cirugia['gnumregi'].")'>Asignar</a></center>");
  } else {
    array_push($elemento, "<center><div class='btn-group' role='group' aria-label='...'><a class='btn btn-success btn-xs' href='javascript: getAsignacion(".$i.",".$cirugia['ganoregi'].",".$cirugia['gnumregi'].")'>".$cirugia['quirofano']."&nbsp;&nbsp;<i class='fa fa-pencil'></i></a><a class='btn btn-danger btn-xs' href='javascript: anularAsignacion(".$i.",".$cirugia['ganoregi'].",".$cirugia['gnumregi'].")'><i class='fa fa-trash'></i></a></div>".'</center>');
  }
  if ($cirugia['EstadoProgramacion'] == 'Cancelada') {
    array_push($elemento, "<i title='".$cirugia['EstadoProgramacion']."' class='fa fa-ban' style='color: #f00;'></i>");
  } else {
    array_push($elemento, "<i title='".$cirugia['EstadoProgramacion']."' class='fa fa-clock-o' style='color: #f6bb42;'></i>");
  }
  /* Agregamos los últimos valores al array */
  array_push($elemento, $cirugia['cama']);
  array_push($elemento, $cirugia['Peso']);
  array_push($elemento, getTime($cirugia['desde']));
  array_push($elemento, $cirugia['rx']);
  array_push($elemento, $cirugia['Insumo']);
  array_push($elemento, $cirugia['horaingreso']);
  /* Agregamos el elemento creado a la propiedad "data" del objeto raíz */
  array_push($salida->data, $elemento);
}
/* Sacamos los datos al navegador en formato JSON */
header('Content-Type: application/json; charset=utf-8');
echo json_encode($salida, JSON_PRETTY_PRINT);
?>
    
answered by 22.05.2017 в 22:21