PHP 回傳 JSON 很方便, 只要將資料經過 json_encode() 就解決了.
不過因為 PHP 自動轉換型別, 造成很多資料都習慣存成字串, 希望在輸出 JSON 的時候, 數字部份可以輸出成數字, 該怎麼做呢?
另一個問題, PHP 轉換成 JSON, 部份陣列會被轉成物件(因為 JavaScript 陣列的 Key 必須是數字, 所以會轉成物件), 要全部強制轉成物件, 該怎麼做呢?
PHP 讓 json_encode() 指定回傳格式
上述的問題, json_encode() 的參數都可以解決.
json_encode() 有這些參數可以用:
- JSON_HEX_QUOT
- JSON_HEX_TAG
- JSON_HEX_AMP
- JSON_HEX_APOS
- JSON_NUMERIC_CHECK
- JSON_PRETTY_PRINT
- JSON_UNESCAPED_SLASHES
- JSON_FORCE_OBJECT
PHP 判斷型別輸出 JSON 數字型態
主要靠 json_encode 的 JSON_NUMERIC_CHECK 參數, ex:
<?php echo json_encode(array('id' => '123', 'data' => 'abc'), JSON_NUMERIC_CHECK); echo json_encode(array('id' => '123', 'data' => 'abc')); echo json_encode(array('id' => 123, 'data' => 'abc')); ?>
輸出結果
- {"id":123,"data":"abc"}
- {"id":"123","data":"abc"}
- {"id":123,"data":"abc"}
PHP 強迫輸出 JSON 物件格式
主要靠 json_encode 的 JSON_FORCE_OBJECT 參數, ex:
<?php echo json_encode(array(1, 2, 3)); echo json_encode(array(1, 2, 3), JSON_FORCE_OBJECT); echo json_encode(array(array(1, 2, 3))); echo json_encode(array(array(1, 2, 3)), JSON_FORCE_OBJECT); echo json_encode(array(1 => 123, 2 => 'abc')); ?>
輸出結果
- [1,2,3]
- {"0":1,"1":2,"2":3}
- [[1,2,3]]
- {"0":{"0":1,"1":2,"2":3}}
- {"1":123,"2":"abc"} // 本來就會輸出 Object
json_encode 輸出中文的亂碼問題,請問有什麽更好的解決辦法嘛?
json_encode 出來的不會是亂碼, 那是經過轉換而已.
你在接收時, JavaScript 印印看, 會是正常的中文字.
若是出現亂碼, 另一種可能性, 就是你的編碼不是用 UTF-8. 🙂
JSON_HEX_QUOT
JSON_HEX_TAG
JSON_HEX_AMP
JSON_HEX_APOS
JSON_PRETTY_PRINT
JSON_UNESCAPED_SLASHES
請問剩下的是什麼用途?
沒有什麼必要的話, 不用去理會他.
HEX 是 16進位, SLASHES 是遇到 " => \" 的意思. 🙂
ty, 解决了我php->java->ios中文乱码的问题!
您好,想請問如果json沒有object的名稱(如以下),是不是就無法抓到裡面的鍵值?
像是我想要抓books_name的話該如何抓取呢?還是說可以自行加物件名稱上去?
以下是我從自己練習用的資料庫 抓出來的資料,但因為沒有object名稱,無法抓取裡面的鍵值。
p.s 我是在練習ios app的開發
(
{
"books_code" = 9789862769508;
"books_name" = "ios7 books";
"books_price" = 480;
"books_type" = books;
id = 1;
}
)
自己加上 object 名稱吧~
佛心版主