2014-01-13 22 views
0

我想要2天已经解码一个json字符串,我用json_decode但这不会做,因为我希望,我想解码它的方式,所有的值都是字符串后。我从一个Web服务接收一个巨大的JSON,它包含字符串,布尔和整数,当我在PHP解码我想他们都是字符串例如,我得到一个像100的int,转换后我想它“ 100“,或者我得到一个假的,转换后我想它是”假“,我想做一个脚本来扫描使用json_decode结果后的obj数组并将它们转换为字符串,但我工作的公司不喜欢那个想法,有人可以帮助我吗?或给我一个提示?Php json解码字符串中的所有值

+0

为什么你想要一切都在字符串中的任何特定原因? – Rao

+0

我所看到的只是'想要'..小心发布'JSON'? –

+0

我不能粘贴JSON,因为它太大,他们不会允许我,所以我必须这样做,因为他们已经使用的应用程序是以这样的方式创建的,即JSON必须在字符串中进行转换,在json之前他自己带来了所有已经在字符串中创建的值,但他们创建并更新了服务,并且所有值都是他们应该是的,现在我必须找到一种方法来将其全部解码为字符串以便使应用程序正常工作 – ZetCoby

回答

1

尝试使用array_walk_recursive每一个值转换为字符串,像这样:

<?php 
$fruits = json_encode ( 
     array (
       'sweet' => array (
         'a' => 1, 
         'b' => false, 
         'c' => null 
       ), 
       'sour' => 'lemon' 
     )); 

$fruits = json_decode ($fruits, true); 

array_walk_recursive ($fruits, 

     function (&$item, $key) 
     { 
      if ($item === true || $item === false) 
      { 
       $item = $item ? 'true' : 'false'; 
      } 
      else if ($item === null) 
      { 
       $item = 'null'; 
      } 
      else 
      { 
       $item = (string) $item; 
      } 
     }); 

var_dump ($fruits); 

<?php 
    $fruits = json_encode (
      array (
        'sweet' => array (
          'a' => 1, 
          'b' => false 
        ), 
        'sour' => 'lemon' 
      )); 

    $fruits = json_decode ($fruits, true); 

    function convertToString(&$item, $key) 
    { 
     if ($item === true || $item === false) 
     { 
      $item = $item ? 'true' : 'false'; 
     } 
     else 
     { 
      $item = (string) $item; 
     } 
    } 

    array_walk_recursive ($fruits, 'convertToString'); 

    var_dump ($fruits); 

+0

I '对不起,我忘了提及,使用json解码后,它产生了一个多维的对象数组 – ZetCoby

+0

为什么我使用json_decode($ json,true),“true”参数将确保返回结果只是数组,而不是对象 – Andrew

+0

谢谢 !它帮助了我很多,使用这个我也成功地转换了对象中的值,非常感谢 – ZetCoby

0

没有办法,你可以用json_decode字符串。你应该找到一些具有该能力的json库或者制作一个自定义的解析器。

另一种方法是遍历结果数组并更新值。例如。

$arr = array(1=>true, 2=>false, 5=>5, 4 =>null, 3=>array(1=>"true", 2=>false)); 
var_dump($arr); 
function update_value(&$item,$key) { 
    if ($item === null) $item = "null"; 
    elseif ($item === false) $item = "false"; 
    elseif ($item === true) $item = "true"; 
    else $item.=""; 
    // ... so on 
} 
array_walk_recursive($arr,'update_value'); 
var_dump($arr);