標籤:cti input 字串 replace 方法 style 索引 不能 輸出
1,php定義對象字面量時,不支援直接書寫,如{“a":"11","b":"22"}。這種書寫方式在其他語言中被支援,在php中需要按如下方式定義:
① $a = ‘{“a":"11","b":"22"}‘【這是json字串,不加外面的引號則是json對象】
② $b = json_decode($a);
這樣$b就是對象字面量了。
2,關於json_encode($value)的機制詳解
① $value為字串 “aa"時,調用此函數後輸出字串 "aa";
② $value為索引數組時,如["aa","bb"],調用此函數後輸出數組 ["aa","bb"] 的字串形式;
③ $value為關聯陣列時,如["aa"=>"11","bb"=>"22"],調用此函數後輸出對象 {"aa":11,"bb":22} 的字串形式;
json_decode($json)的機制和json_encode($value)相同,反過來即可。注意,當為字串時,只有這種形式能被解析 json_decode(‘ "bb" ‘)
即單引號在最外面,裡麵包含雙引號和字元。其他形式 “bb" 或 ‘bb‘ 或 " ‘bb‘ "都不能被json_decode()函數解析。
3,改進後的json_encode()和json_decode()函數,支援漢語(原生的不支援漢語)
註:php中不可直接改寫原生函數,需要寫在類裡,作為類的一個方法
static function json_encode($input)
{
// 從 PHP 5.4.0 起, 增加了這個選項.
if (defined(‘JSON_UNESCAPED_UNICODE‘)) {
return json_encode($input, JSON_UNESCAPED_UNICODE);
}
if (is_string($input)) {
$text = $input;
$text = str_replace(‘\\‘, ‘\\\\‘, $text);
$text = str_replace(
array("\r", "\n", "\t", "\""),
array(‘\r‘, ‘\n‘, ‘\t‘, ‘\\"‘),
$text);
return ‘"‘ . $text . ‘"‘;
} else if (is_array($input) || is_object($input)) {
$arr = array();
$is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1));
foreach ($input as $k => $v) {
if($v == null){
$v = ‘null‘;
}
if ($is_obj) {
$arr[] = self::json_encode($k) . ‘:‘ . self::json_encode($v);
} else {
$arr[] = self::json_encode($v);
}
}
if ($is_obj) {
return ‘{‘ . join(‘,‘, $arr) . ‘}‘;
} else {
return ‘[‘ . join(‘,‘, $arr) . ‘]‘;
}
} else {
return $input . ‘‘;
}
}
php中的json_encode()和json_decode()函數的一些說明