2011-10-09 82 views
2

PHP數組PHP數組被outputed以JSON格式

$grades = array(array(name => "tom", 
        grade => 'A' 

       ), 
      array(name => "jeff", 
        grade=> 'B' 

       ), 
      array(name => "lisa", 
        grade => 'C' 
       ) 
     ); 

$output=array 
( 'status'=>'ok', 
    'content'=>$grades 
) 

,最終JSON輸出我想看看會{"status":'ok',"content":"{"tom":"A","jeff":"B","lisa":"B"}"}

的問題是我應該如何操作的陣列,它可以給我像上面的JSON最終輸出?json_encode($output); echo $output做詭計? 或
我必須做

json_encode($grades)然後又json_encodes($output)但我看到額外\東西一樣{"status":1,"content":"{\"tom\":\"A\",\"jeff\":\"B\",\"lisa\":\"B\"}"}

+2

你爲什麼不嘗試,看看會發生什麼? – vascowhite

+0

我嘗試,但不能得到我想看到的最終結果。 – lilzz

+2

你真的想把內容作爲引用對象文字嗎?也許你真的希望它成爲一個對象? – Corbin

回答

2

我不明白你爲什麼不寫眼前這個:

<?php 
$grades = array(
    array(
     'name' => 'tom', 
     'grade' => 'A' 
    ), 

    array(
     'name' => 'jeff', 
     'grade' => 'B' 
    ), 

    array(
     'name' => 'lisa', 
     'grade' => 'C' 
    ), 
); 

$output = array(
    'status' => 'ok', 
    'content' => $grades, 
); 

print_r(json_decode(json_encode($output))); 

它打印:

stdClass Object 
(
    [status] => ok 
    [content] => Array 
     (
      [0] => stdClass Object 
       (
        [name] => tom 
        [grade] => A 
       ) 

      [1] => stdClass Object 
       (
        [name] => jeff 
        [grade] => B 
       ) 

      [2] => stdClass Object 
       (
        [name] => lisa 
        [grade] => C 
       ) 

     ) 

) 

是不是是預期的結果?

+0

print_r(json_encode($ output)似乎工作 – lilzz

0

的原因,你所得到的「額外」 \的是,你說你要爲輸出無效的JSON。 PHP的默認功能有它的權利,你不會在JSON解析器中解析。

如果你真的想要幾乎-JSON,你必須自己推出。

+0

你的意思是沒有標準的方法來查看{「status」:'ok','content':「{」tom「:」A「,」jeff「:」B「,」lisa「:」B「}」 }? – lilzz

+2

。引號必須在JavaScript中引號內跳過。你想要的是一個語法錯誤。 – Corbin

+0

@lilzz不,有一種標準的方式 - PHP編碼它的方式。我說你想編碼的方式是不明確的。 – tobyodavies

2

不要在json_encode($output)之前調用json_encode($grades),除非你有一些未提及的理由要求成績作爲字符串文字而不是json對象。 json_encode()將對$output內的所有子數組進行遞歸編碼,因此不需要分別對它們進行編碼。

0

您必須更改$grade數組的格式才能獲得所需的輸出。下面試試

$grade_format= array(); 
foreach($grades as $k=>$v) 
{ 
//array_push($output,$k); 
$grade_format[$v['name']]=$v['grade']; 
} 
//echo "<pre>"; 
//print_r($grade_format); 

$output=array 
( 'status'=>'ok', 
    'content'=>$grade_format 
); 

echo "<pre>"; 
echo json_encode($output,JSON_FORCE_OBJECT); 
//output would be 
{"status":"ok","content":{"tom":"A","jeff":"B","lisa":"C"}} 

是你想要的?

REFERENCE

+0

print_r(json_encode($ output))訣竅 – lilzz

+0

no!這只是一個看到輸出的函數。 – diEcho

1

你可能已經想出,陣列的締合鍵得到表示爲在所得到的JSON對象鍵,例如{key1:value1,...},從您得到的輸出中清楚地證明。其次,包含其他數組的數組將在JSON中表示爲列表,例如, [...] 我相信你前面的代碼應該看起來是這樣的:

$grades = array(
    array('name' => 'tom', 'grade' => 'A'), 
    array('name' => 'jeff', 'grade' => 'B'), 
    array('name' => 'lise', 'grade' => 'C'), 
); 

$output = array(
    'status' => 'ok', 
    'content' => $grades 
); 

echo json_encode($output); 

所以將我上面列出會導致下面的JSON的規則。

{"status":"ok","content":[{"name":"tom","grade":"A"},{"name":"jeff","grade":"B"},{"name":"lise","grade":"C"}]} 

我個人認爲你應該使用它,因爲它比你想要的更好。但是,下面的代碼應該會給你你的結果。

$grades = array(
    'tom' => 'A', 
    'jeff' => 'B', 
    'lisa' => 'B', 
); 

$output = array(
    'status' => 'ok', 
    'content' => $grades 
); 

echo json_encode($output); 

輸出:

{"status":"ok","content":{"tom":"A","jeff":"B","lisa":"B"}} 
1

試試這個簡單的命令

$my_array = [ 
    "test" => "value", 
    "another" => [ 
     "fruits" => ["Apple", "Orange"] 
    ] 
]; 

print_r(json_encode($my_array)); 

它會產生

{ 
    "test":"value", 
    "another":{ 
     "fruits":["Apple","Orange"] 
    } 
}