Javascript JSON是有效的,但JSON.parse(jsonObject)返回错误
我使用Yii框架编写网站。我需要从Yii中的DB获取所有数据,我为此编写了一些代码:Javascript JSON是有效的,但JSON.parse(jsonObject)返回错误,javascript,php,json,yii,Javascript,Php,Json,Yii,我使用Yii框架编写网站。我需要从Yii中的DB获取所有数据,我为此编写了一些代码: var response = <?php function getAllDataTable() { $connection = Yii::app()->db; $sql = "SELECT * FROM data"; $command = $connection->createCommand($
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 + "\"");
这是错误,我得到:
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脚本的结果,例如:
我的json对象是正确的,但json.parse(jsonObject)返回错误。为什么?
另外,这个主题并不重复,我看到了所有这些帖子:
要求将字符串作为第一个参数传递
换句话说,您已经有了一个javascript对象。如果您有字符串并希望转换为JavaScript对象,则使用JSON解析。您将对象传递给JSON.parse,而不是字符串。考虑是否需要解析它,因为您的<代码> var响应< /代码>可能已经是您想要的对象。
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,它将进行转换。正如其他人所说,您正在尝试解析一个对象 stringify()将对象转换为字符串。 parse()将JSON字符串转换为对象 这里有一把小提琴,显示了你的代码就是这样。 将来
var data = response;
因为您已经有了一个有效的对象,所以一切都可以正常工作。它是有效的还是无效的。如果JSON Lint真的说它是有效的,那么您使用的是不同的数据。回到(并纠正)假设:JSON是文本。在显示的代码中,没有JSON,而是JavaScript对象文本的赋值。另外,不要手动创建JSON/XML/etc。至少在某些时候,或者使用某些数据时,您肯定会出错。
<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;