0

この構造の 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\"}"
  ]
}

修理方法は?

アップデート

私はこれを試しました:

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\"}"]}

どうしたの?

4

3 に答える 3

8

この方法で JSON を構築しないでください。代わりに、PHP 配列でjson_encodeを使用してください。

$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配列を操作するには、おそらく次のようにすることができます。

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

このようにarray_mapを使用することに注意してください>= PHP 5.3

于 2013-10-07T07:16:08.447 に答える
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);
于 2013-10-07T07:24:49.463 に答える
1

最初に配列を作成してから、json_encode を使用して json 出力を作成する必要があります。そこにjsonをハードコーディングしないでください..

于 2013-10-07T07:19:31.767 に答える