找回密码
 立即注册
查看: 2782|回复: 3

PHPdisk如何开发打印Json

[复制链接]

已分享文件:0个

网盘今日赚:积分

发表于 2012-10-9 12:29:25 | 显示全部楼层 |阅读模式
include '../includes/commons.inc.php';
define('P_W',   1);
include '../plugins/api/pw_api/class_json.php';

$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

$json = new Services_JSON(true);

echo $json->json_encode($arr);

使用以上代码出错,请高人帮忙, 小弟不甚感激

已分享文件:20个

网盘今日赚:积分

发表于 2012-10-9 15:38:32 | 显示全部楼层
你的代码应该正确呀

已分享文件:0个

网盘今日赚:积分

 楼主| 发表于 2012-10-10 17:26:32 | 显示全部楼层
本帖最后由 JohnceCena2012 于 2012-10-10 17:29 编辑

谢谢站长的回复,弄了半天没搞定,从discuz源码中移植了关于json的代码,现在分享出来以免大家以后在这方面浪费时间:

json.class.php:
  1. <?php

  2. /**
  3. * Init by Hubery
  4. */

  5. class CJSON {
  6.         const JSON_SLICE = 1;
  7.         const JSON_IN_STR = 2;
  8.         const JSON_IN_ARR = 4;
  9.         const JSON_IN_OBJ = 8;
  10.         const JSON_IN_CMT = 16;

  11.         static function encode($var) {
  12.                 global $_G;
  13.                 switch (gettype($var)) {
  14.                         case 'boolean':
  15.                                 return $var ? 'true' : 'false';
  16.                         case 'NULL':
  17.                                 return 'null';
  18.                         case 'integer':
  19.                                 return (int) $var;
  20.                         case 'double':
  21.                         case 'float':
  22.                                 return rtrim(sprintf('%.16F',$var),'0');
  23.                         case 'string':
  24.                                 if(function_exists('diconv') && strtolower($_G['charset']) != 'utf-8') {
  25.                                         $var = diconv($var, $_G['charset'], 'utf-8');
  26.                                 }
  27.                                 if(function_exists('json_encode')) {
  28.                                         return json_encode($var);
  29.                                 }
  30.                                 $ascii = '';
  31.                                 $strlen_var = strlen($var);
  32.                                 for ($c = 0; $c < $strlen_var; ++$c) {
  33.                                         $ord_var_c = ord($var{$c});
  34.                                         switch (true) {
  35.                                                 case $ord_var_c == 0x08:
  36.                                                         $ascii .= '\b';
  37.                                                         break;
  38.                                                 case $ord_var_c == 0x09:
  39.                                                         $ascii .= '\t';
  40.                                                         break;
  41.                                                 case $ord_var_c == 0x0A:
  42.                                                         $ascii .= '\n';
  43.                                                         break;
  44.                                                 case $ord_var_c == 0x0C:
  45.                                                         $ascii .= '\f';
  46.                                                         break;
  47.                                                 case $ord_var_c == 0x0D:
  48.                                                         $ascii .= '\r';
  49.                                                         break;

  50.                                                 case $ord_var_c == 0x22:
  51.                                                 case $ord_var_c == 0x2F:
  52.                                                 case $ord_var_c == 0x5C:
  53.                                                         $ascii .= '\\'.$var{$c};
  54.                                                         break;

  55.                                                 case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
  56.                                                         $ascii .= $var{$c};
  57.                                                         break;

  58.                                                 case (($ord_var_c & 0xE0) == 0xC0):
  59.                                                         $char = pack('C*', $ord_var_c, ord($var{$c+1}));
  60.                                                         $c+=1;
  61.                                                         $utf16 =  self::utf8ToUTF16BE($char);
  62.                                                         $ascii .= sprintf('\u%04s', bin2hex($utf16));
  63.                                                         break;

  64.                                                 case (($ord_var_c & 0xF0) == 0xE0):
  65.                                                         $char = pack('C*', $ord_var_c,
  66.                                                                                  ord($var{$c+1}),
  67.                                                                                  ord($var{$c+2}));
  68.                                                         $c+=2;
  69.                                                         $utf16 = self::utf8ToUTF16BE($char);
  70.                                                         $ascii .= sprintf('\u%04s', bin2hex($utf16));
  71.                                                         break;

  72.                                                 case (($ord_var_c & 0xF8) == 0xF0):
  73.                                                         $char = pack('C*', $ord_var_c,
  74.                                                                                  ord($var{$c+1}),
  75.                                                                                  ord($var{$c+2}),
  76.                                                                                  ord($var{$c+3}));
  77.                                                         $c+=3;
  78.                                                         $utf16 = self::utf8ToUTF16BE($char);
  79.                                                         $ascii .= sprintf('\u%04s', bin2hex($utf16));
  80.                                                         break;

  81.                                                 case (($ord_var_c & 0xFC) == 0xF8):
  82.                                                         $char = pack('C*', $ord_var_c,
  83.                                                                                  ord($var{$c+1}),
  84.                                                                                  ord($var{$c+2}),
  85.                                                                                  ord($var{$c+3}),
  86.                                                                                  ord($var{$c+4}));
  87.                                                         $c+=4;
  88.                                                         $utf16 = self::utf8ToUTF16BE($char);
  89.                                                         $ascii .= sprintf('\u%04s', bin2hex($utf16));
  90.                                                         break;

  91.                                                 case (($ord_var_c & 0xFE) == 0xFC):
  92.                                                         $char = pack('C*', $ord_var_c,
  93.                                                                                  ord($var{$c+1}),
  94.                                                                                  ord($var{$c+2}),
  95.                                                                                  ord($var{$c+3}),
  96.                                                                                  ord($var{$c+4}),
  97.                                                                                  ord($var{$c+5}));
  98.                                                         $c+=5;
  99.                                                         $utf16 = self::utf8ToUTF16BE($char);
  100.                                                         $ascii .= sprintf('\u%04s', bin2hex($utf16));
  101.                                                         break;
  102.                                         }
  103.                                 }

  104.                                 return '"'.$ascii.'"';

  105.                         case 'array':
  106.                                 if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
  107.                                         return '{' .
  108.                                                    join(',', array_map(array('CJSON', 'nameValue'),
  109.                                                                                            array_keys($var),
  110.                                                                                            array_values($var)))
  111.                                                    . '}';
  112.                                 }

  113.                                 return '[' . join(',', array_map(array('CJSON', 'encode'), $var)) . ']';
  114.                         case 'object':
  115.                                 if ($var instanceof Traversable)
  116.                                 {
  117.                                         $vars = array();
  118.                                         foreach ($var as $k=>$v)
  119.                                                 $vars[$k] = $v;
  120.                                 }
  121.                                 else
  122.                                         $vars = get_object_vars($var);
  123.                                 return '{' .
  124.                                            join(',', array_map(array('CJSON', 'nameValue'),
  125.                                                                                    array_keys($vars),
  126.                                                                                    array_values($vars)))
  127.                                            . '}';

  128.                         default:
  129.                                 return '';
  130.                 }
  131.         }

  132.         static function nameValue($name, $value) {
  133.                 return self::encode(strval($name)) . ':' . self::encode($value);
  134.         }

  135.         static function reduceString($str) {
  136.                 $str = preg_replace(array(

  137.                                 '#^\s*//(.+)$#m',

  138.                                 '#^\s*/\*(.+)\*/#Us',

  139.                                 '#/\*(.+)\*/\s*$#Us'

  140.                         ), '', $str);

  141.                 return trim($str);
  142.         }

  143.         static function decode($str, $useArray=true) {
  144.                 if(function_exists('json_decode')) {
  145.                         return json_decode($str, $useArray);
  146.             }

  147.                 $str = self::reduceString($str);

  148.                 switch (strtolower($str)) {
  149.                         case 'true':
  150.                                 return true;

  151.                         case 'false':
  152.                                 return false;

  153.                         case 'null':
  154.                                 return null;

  155.                         default:
  156.                                 if (is_numeric($str)) {
  157.                                         return ((float)$str == (integer)$str)
  158.                                                 ? (integer)$str
  159.                                                 : (float)$str;

  160.                                 } elseif (preg_match('/^("|\').+(\1)$/s', $str, $m) && $m[1] == $m[2]) {

  161.                                         $delim = substr($str, 0, 1);
  162.                                         $chrs = substr($str, 1, -1);
  163.                                         $utf8 = '';
  164.                                         $strlen_chrs = strlen($chrs);

  165.                                         for ($c = 0; $c < $strlen_chrs; ++$c) {

  166.                                                 $substr_chrs_c_2 = substr($chrs, $c, 2);
  167.                                                 $ord_chrs_c = ord($chrs{$c});

  168.                                                 switch (true) {
  169.                                                         case $substr_chrs_c_2 == '\b':
  170.                                                                 $utf8 .= chr(0x08);
  171.                                                                 ++$c;
  172.                                                                 break;
  173.                                                         case $substr_chrs_c_2 == '\t':
  174.                                                                 $utf8 .= chr(0x09);
  175.                                                                 ++$c;
  176.                                                                 break;
  177.                                                         case $substr_chrs_c_2 == '\n':
  178.                                                                 $utf8 .= chr(0x0A);
  179.                                                                 ++$c;
  180.                                                                 break;
  181.                                                         case $substr_chrs_c_2 == '\f':
  182.                                                                 $utf8 .= chr(0x0C);
  183.                                                                 ++$c;
  184.                                                                 break;
  185.                                                         case $substr_chrs_c_2 == '\r':
  186.                                                                 $utf8 .= chr(0x0D);
  187.                                                                 ++$c;
  188.                                                                 break;


复制代码

已分享文件:0个

网盘今日赚:积分

 楼主| 发表于 2012-10-10 17:26:43 | 显示全部楼层
本帖最后由 JohnceCena2012 于 2012-10-10 17:30 编辑
  1.                                         case $substr_chrs_c_2 == '\"':
  2.                                                         case $substr_chrs_c_2 == '\\\'':
  3.                                                         case $substr_chrs_c_2 == '\\\\':
  4.                                                         case $substr_chrs_c_2 == '\\/':
  5.                                                                 if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
  6.                                                                    ($delim == "'" && $substr_chrs_c_2 != '\"')) {
  7.                                                                         $utf8 .= $chrs{++$c};
  8.                                                                 }
  9.                                                                 break;

  10.                                                         case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
  11.                                                                 $utf16 = chr(hexdec(substr($chrs, ($c+2), 2)))
  12.                                                                            . chr(hexdec(substr($chrs, ($c+4), 2)));
  13.                                                                 $utf8 .= self::utf16beToUTF8($utf16);
  14.                                                                 $c+=5;
  15.                                                                 break;

  16.                                                         case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
  17.                                                                 $utf8 .= $chrs{$c};
  18.                                                                 break;

  19.                                                         case ($ord_chrs_c & 0xE0) == 0xC0:
  20.                                                                 $utf8 .= substr($chrs, $c, 2);
  21.                                                                 ++$c;
  22.                                                                 break;

  23.                                                         case ($ord_chrs_c & 0xF0) == 0xE0:
  24.                                                                 $utf8 .= substr($chrs, $c, 3);
  25.                                                                 $c += 2;
  26.                                                                 break;

  27.                                                         case ($ord_chrs_c & 0xF8) == 0xF0:
  28.                                                                 $utf8 .= substr($chrs, $c, 4);
  29.                                                                 $c += 3;
  30.                                                                 break;

  31.                                                         case ($ord_chrs_c & 0xFC) == 0xF8:
  32.                                                                 $utf8 .= substr($chrs, $c, 5);
  33.                                                                 $c += 4;
  34.                                                                 break;

  35.                                                         case ($ord_chrs_c & 0xFE) == 0xFC:
  36.                                                                 $utf8 .= substr($chrs, $c, 6);
  37.                                                                 $c += 5;
  38.                                                                 break;

  39.                                                 }

  40.                                         }

  41.                                         return $utf8;

  42.                                 } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {

  43.                                         if ($str{0} == '[') {
  44.                                                 $stk = array(self::JSON_IN_ARR);
  45.                                                 $arr = array();
  46.                                         } else {
  47.                                                 if ($useArray) {
  48.                                                         $stk = array(self::JSON_IN_OBJ);
  49.                                                         $obj = array();
  50.                                                 } else {
  51.                                                         $stk = array(self::JSON_IN_OBJ);
  52.                                                         $obj = new stdClass();
  53.                                                 }
  54.                                         }

  55.                                         array_push($stk, array('what'  => self::JSON_SLICE,
  56.                                                                                    'where' => 0,
  57.                                                                                    'delim' => false));

  58.                                         $chrs = substr($str, 1, -1);
  59.                                         $chrs = self::reduceString($chrs);

  60.                                         if ($chrs == '') {
  61.                                                 if (reset($stk) == self::JSON_IN_ARR) {
  62.                                                         return $arr;

  63.                                                 } else {
  64.                                                         return $obj;

  65.                                                 }
  66.                                         }

  67.                                         $strlen_chrs = strlen($chrs);

  68.                                         for ($c = 0; $c <= $strlen_chrs; ++$c) {

  69.                                                 $top = end($stk);
  70.                                                 $substr_chrs_c_2 = substr($chrs, $c, 2);

  71.                                                 if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == self::JSON_SLICE))) {

  72.                                                         $slice = substr($chrs, $top['where'], ($c - $top['where']));
  73.                                                         array_push($stk, array('what' => self::JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
  74.                                                         if (reset($stk) == self::JSON_IN_ARR) {
  75.                                                                 array_push($arr, self::decode($slice,$useArray));

  76.                                                         } elseif (reset($stk) == self::JSON_IN_OBJ) {
  77.                                                                 if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
  78.                                                                         $key = self::decode($parts[1],$useArray);
  79.                                                                         $val = self::decode($parts[2],$useArray);

  80.                                                                         if ($useArray) {
  81.                                                                                 $obj[$key] = $val;
  82.                                                                         } else {
  83.                                                                                 $obj->$key = $val;
  84.                                                                         }
  85.                                                                 } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
  86.                                                                         $key = $parts[1];
  87.                                                                         $val = self::decode($parts[2],$useArray);

  88.                                                                         if ($useArray) {
  89.                                                                                 $obj[$key] = $val;
  90.                                                                         } else {
  91.                                                                                 $obj->$key = $val;
  92.                                                                         }
  93.                                                                 }

  94.                                                         }

  95.                                                 } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != self::JSON_IN_STR)) {
  96.                                                         array_push($stk, array('what' => self::JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
  97.                                                 } elseif (($chrs{$c} == $top['delim']) &&
  98.                                                                  ($top['what'] == self::JSON_IN_STR) &&
  99.                                                                  (($chrs{$c - 1} != "\") ||
  100.                                                                  ($chrs{$c - 1} == "\" && $chrs{$c - 2} == "\"))) {
  101.                                                         array_pop($stk);
  102.                                                 } elseif (($chrs{$c} == '[') &&
  103.                                                                  in_array($top['what'], array(self::JSON_SLICE, self::JSON_IN_ARR, self::JSON_IN_OBJ))) {
  104.                                                         array_push($stk, array('what' => self::JSON_IN_ARR, 'where' => $c, 'delim' => false));
  105.                                                 } elseif (($chrs{$c} == ']') && ($top['what'] == self::JSON_IN_ARR)) {
  106.                                                         array_pop($stk);
  107.                                                 } elseif (($chrs{$c} == '{') &&
  108.                                                                  in_array($top['what'], array(self::JSON_SLICE, self::JSON_IN_ARR, self::JSON_IN_OBJ))) {
  109.                                                         array_push($stk, array('what' => self::JSON_IN_OBJ, 'where' => $c, 'delim' => false));
  110.                                                 } elseif (($chrs{$c} == '}') && ($top['what'] == self::JSON_IN_OBJ)) {
  111.                                                         array_pop($stk);
  112.                                                 } elseif (($substr_chrs_c_2 == '/**') &&
  113.                                                                  in_array($top['what'], array(self::JSON_SLICE, self::JSON_IN_ARR, self::JSON_IN_OBJ))) {
  114.                                                         array_push($stk, array('what' => self::JSON_IN_CMT, 'where' => $c, 'delim' => false));
  115.                                                         $c++;
  116.                                                 } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == self::JSON_IN_CMT)) {
  117.                                                         array_pop($stk);
  118.                                                         $c++;
  119.                                                         for ($i = $top['where']; $i <= $c; ++$i) {
  120.                                                                 $chrs = substr_replace($chrs, ' ', $i, 1);
  121.                                           }
  122.                                                 }

  123.                                         }

  124.                                         if (reset($stk) == self::JSON_IN_ARR) {
  125.                                                 return $arr;

  126.                                         } elseif (reset($stk) == self::JSON_IN_OBJ) {
  127.                                                 return $obj;

  128.                                         }

  129.                                 }
  130.                 }
  131.         }


  132.         static function utf8ToUnicode( &$str ) {
  133.                 $unicode = array();
  134.                 $values = array();
  135.                 $lookingFor = 1;

  136.                 for ($i = 0; $i < strlen( $str ); $i++ ) {
  137.                         $thisValue = ord( $str[ $i ] );
  138.                         if ( $thisValue < 128 ) {
  139.                                 $unicode[] = $thisValue;
  140.                   } else {
  141.                                 if ( count( $values ) == 0 ) {
  142.                                         $lookingFor = ( $thisValue < 224 ) ? 2 : 3;
  143.                         }
  144.                                 $values[] = $thisValue;
  145.                                 if ( count( $values ) == $lookingFor ) {
  146.                                         $number = ( $lookingFor == 3 ) ?
  147.                                                 ( ( $values[0] % 16 ) * 4096 ) + ( ( $values[1] % 64 ) * 64 ) + ( $values[2] % 64 ):
  148.                                                 ( ( $values[0] % 32 ) * 64 ) + ( $values[1] % 64 );
  149.                                         $unicode[] = $number;
  150.                                         $values = array();
  151.                                         $lookingFor = 1;
  152.                                 }
  153.                         }
  154.                 }
  155.                 return $unicode;
  156.         }

  157.         static function unicodeToUTF8( &$str )
  158.         {
  159.                 $utf8 = '';
  160.                 foreach( $str as $unicode )
  161.                 {
  162.                         if ( $unicode < 128 )
  163.                         {
  164.                                 $utf8.= chr( $unicode );
  165.                         }
  166.                         elseif ( $unicode < 2048 )
  167.                         {
  168.                                 $utf8.= chr( 192 +  ( ( $unicode - ( $unicode % 64 ) ) / 64 ) );
  169.                                 $utf8.= chr( 128 + ( $unicode % 64 ) );
  170.                         }
  171.                         else
  172.                         {
  173.                                 $utf8.= chr( 224 + ( ( $unicode - ( $unicode % 4096 ) ) / 4096 ) );
  174.                                 $utf8.= chr( 128 + ( ( ( $unicode % 4096 ) - ( $unicode % 64 ) ) / 64 ) );
  175.                                 $utf8.= chr( 128 + ( $unicode % 64 ) );
  176.                         }
  177.                 }
  178.                 return $utf8;
  179.         }

  180.         static function utf8ToUTF16BE(&$str, $bom = false) {
  181.                 $out = $bom ? "\xFE\xFF" : '';
  182.                 if(function_exists('mb_convert_encoding'))
  183.                         return $out.mb_convert_encoding($str,'UTF-16BE','UTF-8');

  184.                 $uni = self::utf8ToUnicode($str);
  185.                 foreach($uni as $cp)
  186.                         $out .= pack('n',$cp);
  187.                 return $out;
  188.         }

  189.         static function utf16beToUTF8(&$str) {
  190.                 $uni = unpack('n*',$str);
  191.                 return self::unicodeToUTF8($uni);
  192.         }
  193. }
复制代码
mobile.class.php
  1. <?php

  2. /**
  3. * Init by Hubery
  4. */

  5. class mobile_core {   
  6.         function result($result) {
  7.                 global $_G;
  8.                 echo mobile_core::json($result);
  9.                 exit;
  10.         }

  11.         function json($encode) {
  12.                 require_once './json.class.php';
  13.                 return CJSON::encode($encode);
  14.         }

  15.         function getvalues($variables, $keys, $subkeys = array()) {
  16.                 $return = array();
  17.                 foreach($variables as $key => $value) {
  18.                         foreach($keys as $k) {
  19.                                 if($k{0} == '/' && preg_match($k, $key) || $key == $k) {
  20.                                         if($subkeys) {
  21.                                                 $return[$key] = mobile_core::getvalues($value, $subkeys);
  22.                                         } else {
  23.                                                 if(!empty($value) || !empty($_GET['debug']) || (is_numeric($value) && intval($value) === 0 )) {
  24.                                                         $return[$key] = is_array($value) ? mobile_core::arraystring($value) : (string)$value;
  25.                                                 }
  26.                                         }
  27.                                 }
  28.                         }
  29.                 }
  30.                 return $return;
  31.         }

  32.         function arraystring($array) {
  33.                 foreach($array as $k => $v) {
  34.                         $array[$k] = is_array($v) ? mobile_core::arraystring($v) : (string)$v;
  35.                 }
  36.                 return $array;
  37.         }
  38.        
  39.         function errorExit($error){
  40.                 $outPut = array(
  41.           'ErrorMessage' => $error);

  42.                 mobile_core::result($outPut);
  43.                
  44.                 exit();
  45.         }

  46. }

  47. ?>
复制代码
使用方法:


  1. include './mobile.class.php';

  2. $outPut = array(
  3.           'ErrorMessage' => $ErrorMessage,
  4.           'Test001' => 'Very Good');

  5. mobile_core::result($outPut);
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|PHPDisk系统交流社区

GMT+8, 2024-12-22 13:36 , Processed in 0.055009 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表