JSON有效,但JSON.parse(jsonObject)返回错误

时间:2015-10-11 23:17:03

标签: javascript php json yii

我使用Yii框架编写网站。我需要在Yii中从DB获取所有数据,并为此编写了一些代码:

var response = 
    <?php 
        function getAllDataTable() {
            $connection = Yii::app()->db;
            $sql = "SELECT * FROM data";
            $command = $connection->createCommand($sql);

            $rows = $command->queryAll();

            return $rows;
        }

        function getJsonFromRows($rows) {
            $json = "{ ";

            foreach ($rows as $rowIndex => $rowData) {
                if ($rowIndex !== 0)
                    $json .= ", ";

                $json .= "\"row".$rowIndex."\": {";

                $colIndex = 0;
                foreach ($rowData as $columnHeader => $cellValue) {
                    if ($colIndex++ !== 0)
                        $json .= ", ";
                    $json .= "\"".$columnHeader."\"".": "."\"".$cellValue."\"";
                }

                $json .= "} ";
            }

            $json.="}";

            return $json;
        }

        $rows = getAllDataTable();

        echo getJsonFromRows($rows);
     ?>;

var data = JSON.parse(response);

console.log("data: \"" + data + "\"");

我尝试使用JSON来做到这一点。 这是来自调试器的代码:

var response = { "row0": {"year": "2001", "discipline": "some discipline", "theme": "some theme", "pair": "some pair"} , "row1": {"year": "2001", "discipline": "some discipline", "theme": "some theme", "pair": "some pair"} };
var data = JSON.parse(response);
console.log("data: \"" + data + "\"");

这是错误,我得到了:

SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data material:53:18

Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead jquery-1.9.1.min.js:1:0

Use of getPreventDefault() is deprecated.  Use defaultPrevented instead.

我在许多网站上查看php脚本的结果如下: https://jsonformatter.curiousconcept.com/ 我的json对象是正确的,但JSON.parse(jsonObject)返回错误。为什么呢?

P.S。这个主题不重复,我看到所有这些帖子: JSON Lint says it's valid but JSON.parse throws error jQuery IE9 JSON.SyntaxError parseerror, but JSON is valid JSON.parse Error on Valid JSON check if required JSON is valid - node JSON.parse error on a seemingly valid JSON

4 个答案:

答案 0 :(得分:4)

JSON.parse期望将字符串作为第一个参数传递。

换句话说,你已经拥有了一个javascript对象。如果您有字符串并且想要转换为 JavaScript对象,则使用JSON解析。

答案 1 :(得分:2)

在PHP中

    function getJsonFromRows($rows) {
        $json = array();

        foreach ($rows as $rowIndex => $rowData) {
            $tmp = array();
            foreach ($rowData as $columnHeader => $cellValue) {
                $tmp[$columnHeader] =$cellValue;
            }

            $json["$rowIndex"] = $tmp;
        }

        return json_encode($json);
    }

现在,如果您将对将要转换的响应执行JSON.parse。

答案 2 :(得分:0)

您正在将对象传递给JSON.parse而不是字符串。考虑一下你是否需要解析它,因为var response可能已经是你想要的对象了。

答案 3 :(得分:0)

正如其他人一直在说的那样,你正试图解析一个对象。

JSON.stringify()将对象转换为字符串。 JSON.parse()将JSON字符串转换为对象。

这是一个小提示,显示您的代码就是这种情况。 http://jsfiddle.net/wpwelch/39hx5oy0/

<div id="jsonString"></div>
<br />
<div id="jsObject"></div>  

 var test = { "row0": {"year": "2001", "discipline": "some discipline", "theme": "some theme", "pair": "some pair"} , "row1": {"year": "2001", "discipline": "some discipline", "theme": "some theme", "pair": "some pair"} };
    strEcho = JSON.stringify(test);
    objRef = test.row0.year; // Works because var test is already an object
    $("#jsonString").html(strEcho); // Works because .stringify() is working with a valid JSON object.
    $("#jsObject").html(objRef); // This shows the year 2001

在您的代码中,您可以编辑此行

var data = JSON.parse(response);

var data = response;

并且一切都会有效,因为你已经有了一个有效的对象。