Php json将所有值解码为字符串

Posted

技术标签:

【中文标题】Php json将所有值解码为字符串【英文标题】:Php json decode all values in to strings 【发布时间】:2014-01-13 07:34:51 【问题描述】:

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

【问题讨论】:

您希望所有内容都在字符串中的任何特定原因? 我看到的只有want .. 想发帖JSON 吗? 我无法粘贴 json,因为它太大而且他们不允许我粘贴,我必须这样做,因为他们已经在使用的应用程序是以 json 必须的方式制作的转换为字符串,在 json 自己带有所有已经在字符串中生成的值之前,但是它们生成并更新到服务并且所有值都是它们应该的值,现在我必须找到一种方法来按顺序在字符串中解码它使应用程序工作 【参考方案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 );

【讨论】:

对不起,我忘了提到使用 json 解码后会产生一个多维对象数组 这就是我使用 json_decode ($json, true ) 的原因,“true”参数将确保返回结果只是 Array,而不是 Object 谢谢!它对我帮助很大,使用它我还设法转换了对象中的值,非常感谢 array_walk_recursive() 使用 lambda 并使用 $item = (string) $item; 而不是 $item = '' . $item; 不是更好吗? 你说得对,@user555,(字符串)更好。如果 php 版本 >=5.3,则 lambda 很好【参考方案2】:

您无法使用 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);

【讨论】:

以上是关于Php json将所有值解码为字符串的主要内容,如果未能解决你的问题,请参考以下文章

php里面怎样把utf-8编码的字符串 (如 \u5e7f), 重新解码成中文,多谢

如何将 json 字符串解码为 UTF-8?

kendoui parameterMap 解码 php 对象的正确 json 编码是啥?

使用 Swift 4 Decodable 将字符串 JSON 响应转换为布尔值

使用 PHP、curl 解码从 Flickr API 返回的 json 字符串

golang json 编码解码