【问题标题】:json encode and decode is not working in PHPjson 编码和解码在 PHP 中不起作用
【发布时间】:2020-07-22 04:41:04
【问题描述】:

我有一个对象,我必须转换成数组,我使用了 json 编码和 json 解码,但它不能正常工作。

我的对象

$LearningNodesData = '{
        0:"5df31",
        1:"5df32",
        2:"5df33"
    }';

我的代码

    $LearningNodesData1 =json_decode(json_encode($LearningNodesData,true),true);
echo "<pre>";
print_r($LearningNodesData1);

我的预期输出

[
  "5df31",
  "5df32",
  "5df33"
]

我的输出

{
    0:"5df1",
    1:"5df2",
    2:"5df3"
}

这里有什么问题

更新的代码部分

<?php
$LearningNodesData = '{
    "0":"5df31",
    "1":"5df32",
    "2":"5df33"
}';

echo my_json_decode($LearningNodesData);


function my_json_decode($s) {
    $s = str_replace(
        array('"',  "'"),
        array('\"', '"'),
        $s
    );
    $s = preg_replace('/(\w+):/i', '"\1":', $s);
    return json_decode(sprintf('{%s}', $s));
}
?>

【问题讨论】:

  • 如果你有一个实际有效的 json 字符串,你做错了,先用 true 标志解码,然后编码,所以encode(decode(string here, true)),你在做另一个绕路
  • @kevin,我用过 $LearningNodesData1 = json_encode(json_decode($LearningNodesData, true));但我收到null
  • 如果你期望一个数组,你应该从一个数组开始。

标签: php php-7


【解决方案1】:

您的字符串不是有效的 json。

有效的 json 是:

$LearningNodesData = '{
    "0":"5df31",
    "1":"5df32",
    "2":"5df33"
}';

你可以阅读这个:php json_decode fails without quotes on key也许你找到了解决方案

【讨论】:

  • 您能否检查我更新的代码部分,即使不工作,也没有打印任何内容
  • $LearningNodesData = '{ "0":"5df31", "1":"5df32", "2":"5df33" }'; $array_data = json_decode($LearningNodesData, true); return array_values( $array_data ); 你能检查一下吗?
【解决方案2】:

您正在尝试对字典进行编码/解码,而您的预期结果是一个列表。如果您想要的结果是一个列表,那么试试这个!

$LearningNodesData = '["5df31","5df32","5df33"]';

不是这个

$LearningNodesData = '{
    0:"5df31",
    1:"5df32",
    2:"5df33"
}';

【讨论】:

    【解决方案3】:

    如果你将一个对象转换为数组,它总是会返回键

        $LearningNodesData = '{
        "0":"5df31",
        "1":"5df32",
        "2":"5df33"
        }';
       $arr = json_decode($LearningNodesData,true);
       print_r($arr);
      //output
      Array
      (
        [0] => 5df31
        [1] => 5df32
        [2] => 5df33
      )
    

    到底数组不带键还是带键都无所谓(如果是数字键的话)。您想要的输出没有键,但您将使用它们的索引位置访问。

    如果您不希望它作为数组,您可以使用 imploade() 函数将其转换为逗号格式的字符串

    echo imploade(',',$arr); //5df31,5df32,5df33
    

    【讨论】:

      【解决方案4】:

      如果我理解,您想回显/打印数组,但没有键?如果是这样:

      <?php
      $learningNodesData = '{
          "0":"5df31",
          "1":"5df32",
          "2":"5df33"
      }';
      
      $decodedLearningNodesData = json_decode($learningNodesData, true);
      
      $noKeysLearningNodesData = json_encode(array_values($decodedLearningNodesData));
      print_r($noKeysLearningNodesData);
      
      ?>
      

      将打印出来:

      ["5df31","5df32","5df33"]
      

      【讨论】:

        猜你喜欢
        • 2018-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-21
        相关资源
        最近更新 更多