2016-07-22 155 views
0

Im使用Slim Framework以JSON格式返回结果。返回已格式化的JSON - Slim Framework

$app->get('/forecast_range/{latitude}/{longitude}/{timeStart}/{timeEnd}', function (Request $request, Response $response) { 

    $latitude = $request->getAttribute('latitude'); 
    $longitude = $request->getAttribute('longitude'); 
    $timeStart = $request->getAttribute('timeStart'); 
    $timeEnd = $request->getAttribute('timeEnd'); 

    $timeStart = new DateTime($timeStart); 
    $timeEnd = new DateTime($timeEnd); 

    $coordinates[] = array('latitude' => $latitude, 'longitude' => $longitude); 

    $forecast = new forecast_range_url($coordinates, 1, $timeStart, $timeEnd); 
    $result = $forecast->runForecast(true);  

    return $response->withJson($result); 

}); 

$result的变量已经是一个JSON,多维一个。我怎样才能返回到客户端的$结果变量,而无需再次编码它?

我试图用这段代码将$result keysJSON附加到响应中。我感觉即时接近,但还没有。我收到一个语法错误。

$lenght = count($result);   

    for ($i=0; $i<$lenght; $i++){ 
     $response->write($result[$i]);  
    }  

    $newResponse = $response->withHeader(
     'Content-type', 
     'application/json; charset=utf-8' 
    ); 

    return $newResponse; 

回答

0
return $response->write('{"json":"message"}') 
      ->withHeader('Content-Type', 'application/json'); 

就直接写到流,并且不要忘记设置适当的内容类型:)

+0

啊我忘了提到它的多维的JSON。它适用于如果我把 返回$ response-> write($ result [0]) - > withHeader('Content-Type','application/json'); 它返回已经格式化的json,但不是整个集合。 :/ –

+0

可能我需要循环json作为param发送到写入方法..因为我需要解码然后再编码...:/我是对吗? –

+0

是的。您需要这样做;( – geggleto

0

我想,我怎么会返回一个已格式化JSON。 我需要在response附加“,”和“[]”,否则数据将不会处于正确的JSON语法中。

这就是我想出了:

$result = $forecast->runForecast(true);   
$lenght = count($result);    

    for ($i=0; $i<$lenght; $i++){   
     if ($i == 0){ 
      $response->write('['.$result[$i].',');      
     } 
     elseif($i == $lenght - 1) 
     { 
      $response->write($result[$i].']'); 
     } 
     else 
     { 
      $response->write($result[$i].',');       
     } 
    }   

$newResponse = $response->withHeader('Content-type', 'application/json; charset=utf-8'); 
return $newResponse;