2013-10-07 61 views
0

我想創建一個與此結構的JSON:用PHP創建問題JSON字符串

{"id":"ws", 
"data":[ 
    {"name":"it.geosolutions"}, 
    {"name":"cite"}, 
    {"name":"testwor"}, 
    {"name":"tiger"}, 
    {"name":"sde"}, 
    {"name":"topp"}, 
    {"name":"newwork"}, 
    {"name":"sf"}, 
    {"name":"nurc"} 
] 
} 

我做的:

function funcArray(){ 
foreach ($ws as $item){ 
    $wsarray[] = '{"name":"'.$item->name.'"}'; 
} 
return $wsarray; 
} 

$json_data = array ('id'=>'ws','data'=>funcArray()); 
$json = json_encode($json_data); 

,我也得到:

{"id":"ws", 
"data":[ 
    "{\"name\":\"it.geosolutions\"}", 
    "{\"name\":\"cite\"}", 
    "{\"name\":\"testwor\"}", 
    "{\"name\":\"tiger\"}", 
    "{\"name\":\"sde\"}", 
    "{\"name\":\"topp\"}", 
    "{\"name\":\"newwork\"}", 
    "{\"name\":\"sf\"}", 
    "{\"name\":\"nurc\"}" 
    ] 
} 

如何修復它?

UPDATE

我嘗試這樣做:

function funcArray(){ 
foreach ($ws as $item){ 
    $wsarray[] = json_encode(array('name'=>$item->name)); 
} 
return $wsarray; 
} 

但得到:

{"id":"ws","data":["{\"name\":\"it.geosolutions\"}","{\"name\":\"cite\"}","{\"name\":\"testwor\"}","{\"name\":\"tiger\"}","{\"name\":\"sde\"}","{\"name\":\"topp\"}","{\"name\":\"newwork\"}","{\"name\":\"sf\"}","{\"name\":\"nurc\"}"]} 

的哪些錯誤?

回答

8

不要以這種方式構建JSON。改爲在PHP數組上使用json_encode。使用

echo json_data(array(
    "id" => "ws", 
    "data" => array_map(function($item) { return array("name" => $item->name); }, $ws) 
)); 

注意

$arr = array(
"id" => "ws", 
"data" => array(
    array("name" => "it.geosolutions"), 
    array("name" => "cite"), 
    array("name" => "testwor"), 
    array("name" => "tiger"), 
    array("name" => "sde"), 
    array("name" => "topp"), 
    array("name" => "newwork"), 
    array("name" => "sf"), 
    array("name" => "nurc") 
)); 

echo json_encode($arr); 

輸出

{"id":"ws","data":[{"name":"it.geosolutions"},{"name":"cite"},{"name":"testwor"},{"name":"tiger"},{"name":"sde"},{"name":"topp"},{"name":"newwork"},{"name":"sf"},{"name":"nurc"}]} 

當您$ws陣列工作,你也許可以做這樣的事情array_map像這樣需要>= PHP 5.3

+0

致謝。我把數組放入數組中,它可以工作。 –

+0

巧妙使用'array_map',+1。 –

1

您需要先創建一個數組,然後使用json_encode創建json輸出。不要硬編碼任何JSON有..

1

相反建設JSON字符串的函數funcArray爲什麼不建立一個數組並返回它

function funcArray(){ 
    foreach ($ws as $item){ 
     $wsarray[] = array("name"=>$item->name); 
    } 
    return $wsarray; 
    } 

$json_data = array ('id'=>'ws','data'=>funcArray()); 
$json = json_encode($json_data);