解码json问题,返回null值

时间:2011-07-27 08:38:27

标签: php json

我的解决方案是:

function format_json($str)
  {
    ...
    $str = preg_replace('/([a-z]+):/i', '"$1":', $str);
    $wtr = array('""',',",');
    $rpw = array('"',',');
    return str_replace($wtr, $rpw, $str);
  }

5 个答案:

答案 0 :(得分:2)

JSON仅支持双引号字符串,并且必须引用所有属性名称。

答案 1 :(得分:2)

如前面的答案中所述,您需要在字符串中添加双引号。检查json字符串的一种非常快速和快速的方法是使用JSONLint

以下是您将从JSONLint获得的输出:

Parse error on line 1:
{    m: [        {     
-----^
Expecting 'STRING', '}'

因此您需要更改所有没有双引号的部分。例如:

{m: [ ...

将成为:

{"m": [ ...

评论后编辑:似乎字符串中的双引号未正确转义。例如:

{"m" : [ { "g": [ "32", "Brezilya-"Serie" A", "83", ...
Here -----------------------------^ and ^

应该是:

{"m" : [ { "g": [ "32", "Brezilya-\"Serie\" A", "83", ...

答案 2 :(得分:2)

尝试通过JSONLint运行您的JSON。首先,属性名称必须用双引号括起来。然后,字符串也必须用双引号括起来,而不是单引号:

{
    "m": [
        {
            "g": [
                32,
                "Brezilya-SerieA",
                .
                .
                .

答案 3 :(得分:2)

您可以使用此处http://pear.php.net/pepr/pepr-proposal-show.php?id=198

中的类来解析此字符串

require_once'JSON.php';
$ json = new Services_JSON();
$ data = $ json-> decode($ yourstring);

答案 4 :(得分:1)

在您的JSON中,您应该使用“”代替'',这将得到解决。

它是JSON中的一个约定,双qoutes将用于定义对象名称或对象。尝试使用在C ++中编写字符串来定义json的方式。