json编码和解码在PHP中不起作用

json编码和解码在PHP中不起作用,php,php-7,Php,Php 7,我有一个对象,我必须转换成数组,我使用了json编码和json解码,但它不能正常工作 我的目标 $LearningNodesData = '{ 0:"5df31", 1:"5df32", 2:"5df33" }'; 我的代码 $LearningNodesData1 =json_decode(json_encode($LearningNodesData,true),true

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

我的目标

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

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

<?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));
}
?>
这是怎么回事

更新的代码部分

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

您的字符串不是有效的json

有效的json应该是:

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

您可以阅读以下内容:可能您发现解决方案

您的字符串不是有效的json

有效的json应该是:

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

您可以阅读以下内容:也许您找到了解决方案

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

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

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

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

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

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

如果要将对象转换为数组,它将始终返回键

echo imploade(',',$arr); //5df31,5df32,5df33
在结束数组中,没有键或有键并不重要(如果是数字键)。您想要的输出没有键,但您可以使用它们的索引位置进行访问

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

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

$decodedLearningNodesData = json_decode($learningNodesData, true);

$noKeysLearningNodesData = json_encode(array_values($decodedLearningNodesData));
print_r($noKeysLearningNodesData);

?>

如果要将对象转换为数组,它将始终返回键

echo imploade(',',$arr); //5df31,5df32,5df33
在结束数组中,没有键或有键并不重要(如果是数字键)。您想要的输出没有键,但您可以使用它们的索引位置进行访问

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

<?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"]

如果我理解,你想回显/打印阵列,但没有键?如果是:

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

如果您有一个实际有效的json字符串,那么您的做法是错误的,首先使用true标志对其进行解码,然后对其进行编码,因此
encode(decode(string,here,true))
,您的做法是相反的around@kevin,我使用了$LearningNodesData1=json_encode(json_decode($LearningNodesData,true));但是我得到的是
null
如果你想要一个数组,你应该从一个数组开始。如果你有一个实际有效的json字符串,那么你做的方式是错误的,先用true标志解码它,然后对它进行编码,所以
编码(decode(string,here,true))
,你是用另一种方式进行的around@kevin,我使用了$LearningNodesData1=json_encode(json_decode($LearningNodesData,true));但是我得到了
null
如果你需要一个数组,你应该从一个数组开始。你能检查我更新的代码部分吗,即使不工作,也没有任何东西正在打印
$LearningNodesData='{“0”:“5df31”,“1”:“5df32”,“2”:“5df33”}'$array_data=json_decode($LearningNodesData,true);返回数组_值($array_data)你能检查一下吗?你能检查一下我更新的代码部分吗?即使没有工作,也没有任何东西正在打印
$LearningNodesData='{“0”:“5df31”,“1”:“5df32”,“2”:“5df33”}$array_data=json_decode($LearningNodesData,true);返回数组_值($array_data)你能检查一下吗。