JSON是有效的,但是JSON.parse(jsonObject)返回错误
JSON is valid, but JSON.parse(jsonObject) return error
我用Yii框架写网站。我需要从DB在Yii中获得所有数据,我为此编写了一些代码:
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)返回错误。为什么?
注:这个主题不是重复的,我看到了所有这些帖子:JSON Lint说它是有效的,但是JSON。解析抛出错误jQuery IE9 JSON。语法错误,但JSON是有效的JSON。解析有效JSON时出现错误检查所需的JSON是否有效JSON。解析看似有效的JSON出错
JSON。Parse期望传递一个字符串作为第一个参数。
换句话说,你已经有了一个javascript对象。如果你有一个字符串并且想要转换为JavaScript对象,则使用JSON解析。
In 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。解析它将转换的响应
您正在将对象传递给JSON。解析而不是字符串。考虑一下是否需要解析它,因为您的var response
可能已经是您想要的对象。
正如其他人所说,您正在尝试解析一个对象。
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);
to be
var data = response;
和其他东西都可以工作,因为你已经有了一个有效的对象
相关文章:
- jQuery匹配JSON对象的部分文本
- 在循环中分配json值时,值被覆盖
- 需要帮助设置json数组
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 使用JQuery解析JSON嵌套数组
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 如何使用json将对象列表从java转换为javascript
- 如何使用 node.js 比较两个 json 数组
- 如何将JSON数据导入我的ejs模板
- 区分JSON中的矩阵和列表列表
- 不显示带有本地json文件数据的谷歌地图脚本
- 如何将json数据显示为html
- 如何为json对象中的段发送array[]
- 使用angularjs中的JSONObject读取json
- 在 JSONObject 中解码 JSON 对象和 JSON 数组
- JSON是有效的,但是JSON.parse(jsonObject)返回错误
- 在java中构造json Object并从JSONObject获取值