Source for file WebAPI_JSON.php
Documentation is available at WebAPI_JSON.php
* Project: WebAPI_JSON:: JSON API
* File: WebAPI/WebAPI_JSON.php
* WebAPI_JSON class는 JSON encode시에 UTF-8 관련 conflict를
* @subpackage WebAPI_JSON
* @author JoungKyun.Kim <http://oops.org>
* @copyright (c) 2018, OOPS.org
* @link http://pear.oops.org/package/WebAPI
* JSON API for WebAPI Package
* UTF-8 관련 conflict에 상관 없이 json encoding
// {{{ +-- static private (mixed) normalize ($v)
* JSON encode시의 UTF-8 conflict 문제를 해결하기 위해
* ASCII 외의 문자는 모두 urlencode 처리한다.
static private function normalize ($var) {
foreach ( $var as $key => $val ) {
$buf[urlencode ($key)] = self::normalize ($val);
// {{{ +-- static private (mixed) unnormalize ($v)
* url encode 되어 있는 데이터를 url decode 처리
static private function unnormalize ($var, $assoc = true) {
foreach ( $var as $key => $val ) {
$buf[urldecode ($key)] = self::unnormalize ($val, $assoc);
// {{{ +-- static public (string) encode ($data, $nopretty = false)
* utf8 conflict 및 binary data 를 해결한 json encode wrapper
* @param mixed encode할 변수
* @param bool (optional) pretty 출력 여부. 기본값 false이며 이는 pretty 출력
* 을 의미한다. pretty 인자는 php 5.4 부터 지원한다. [기본값 false]
* @param bool (optional) binary safe를 위한 normalize를 할지 여부 [기본값 true]
static public function encode ($data, $nopretty = false, $normal = true) {
if ( ! count ((array) $data) )
if ( ! ($data = trim ($data)) )
$data = self::normalize ($data);
if ( defined ('JSON_UNESCAPED_UNICODE') ) {
$opt = JSON_NUMERIC_CHECK | JSON_UNESCAPED_UNICODE;
$opt |= JSON_PRETTY_PRINT;
$data = self::normalize ($data);
// {{{ +-- static public (string) decode ($data)
* utf8 conflict 및 binary data 를 해결한 json encode wrapper
* @param string $data json data
* @param int (optional) User specified recursion depth (default: 512)
* @param int (optional) Bitmask of JSON decode options. Currently only
* JSON_BIGINT_AS_STRING is supported (default is
* to cast large integers as floats)
static public function decode ($data, $assoc = false, $depth = 512, $options = 0) {
return self::unnormalize ($data, $assoc);
* vim: set filetype=php noet sw=4 ts=4 fdm=marker:
* vim600: noet sw=4 ts=4 fdm=marker
* vim<600: noet sw=4 ts=4
|