PHPはネストされたJSONを生成します
({
「ああ」: [
{
「ID」:「0」、
"タイトル": "タイトル",
}、
{
「ID」:「1」、
"タイトル": "タイトル",
}
]、
"bb":[
{
…
}、
{
….
}
]
})
PHP はこのネストされた JSON をどのように生成しますか
------解決策---------------------
/**Jsonデータのフォーマット
* @param 混合 $data データ
* @param String $indent インデント文字、デフォルトはスペース 4 個
* @return JSON
*/
関数 jsonFormat($data, $indent=null){
// 中国語の文字を保護するために、配列内の各要素に対して urlencode 操作を再帰的に実行します
array_walk_recursive($data, 'jsonFormatProtect');
// jsonエンコード
$data = json_encode($data);
// urlencode コンテンツを urldecode します
$data = urldecode($data);
// インデント処理
$ret = '';
$pos = 0;
$length = strlen($data);
$indent = isset($indent)? $indent : ' ';
$newline = "n";
$prevchar = '';
$outofquotes = true;
for($i=0; $i
$char = substr($data, $i, 1);
if($char=='"' && $prevchar!='\'){
$outofquotes = !$outofquotes;
}elseif(($char=='}' ------解決策--------- $char==']') && $ outofquotes ){
$ret .= $newline;
$pos --;
for($j=0; $j
$ret .= $indent;
}
}
$ret .= $char;
if(($char==',' ------解決策---------------------- $char=='{' ---- - -解決策-------------------- $char=='[') && $outofquotes){
$ret .= $newline;
if($char=='{' ------解決策---------------------- $char=='['){
$pos++;
}
for($j=0; $j
$ret .= $indent;
}
}
$prevchar = $char;
}
$ret を返す;
}
/**Urlencode 配列要素
* @param String $val
*/
関数 jsonFormatProtect(&$val){
if($val!==true && $val!==false && $val!==null){
$val = urlencode($val);
}
}
ヘッダー('content-type:application/json;charset=utf8');
$arr = array(
'aa' => array(
配列(
'Id' => 0,
'タイトル' => 'タイトル'
), array( 'Id' => 1, 'title' => 'title' ), ), 'bb' => array( array( 'Id' => 2, 'title' => 'タイトル' ), array( 'Id' => 3, 'title' => 'タイトル' ), ));echo jsonFormat($arr);{ "aa":[ { "Id":"0" , "タイトル":"タイトル" }, { "ID":"1", "タイトル":"タイトル" } ], "bb":[ { "ID":"2", "タイトル":"タイトル" }, { "ID":"3", "タイトル":"タイトル" } ]}