根据http://www.w3schools.com/json/json_syntax.asp,JSON'数组'是这样的:
"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter","lastName":"Jones"}
]
根据相同的来源,这是一个JSON'对象':
{"firstName":"John", "lastName":"Doe"}
我为我的应用程序开发了一个API,这是我收到的JSON响应:
{
"status":"success",
"message": [
{
"entry_id":"1",
"entry_name":"12345678",
"entry_body":"this is just the beginning update",
"entry_date":"2016-05-01 08:25:51",
"status":"active","created_timestamp":"2016-05-01 21:25:51",
"updated_timestamp":null
},
{
"entry_id":"2",
"entry_name":"one one one",
"entry_body":"this is just the beginning update 1",
"entry_date":"2016-05-02 01:44:03",
"status":"active",
"created_timestamp":"2016-05-02 14:44:03",
"updated_timestamp":null
},
{
"entry_id":"3",
"entry_name":"two two two",
"entry_body":"this is just the beginning update 2",
"entry_date":"2016-05-02 01:44:13",
"status":"active",
"created_timestamp":"2016-05-02 14:44:13",
"updated_timestamp":null
}
]
}
在datatables中,我制作了以下脚本,但它没有读取JSON文件:
var table = $('#list_blogs_table').DataTable({
"ajax": {
"url": "/BlogApiV1/BlogApi/blogs",
"dataSrc": "message",
}
"columnDefs":
[
{
我的网址必须是GET方法(我正确地做到了吗?)
此外,假设我的JSON数据被视为ARRAY。那是对的吗?我通过声明"dataSrc": "message",
告诉数据表数据是从'message'开始的。那是对的吗?
答案 0 :(得分:1)
您的JSON包含多个隐藏的非法控制字符,它似乎是转义和无效标签。即使您的JSON将作为本地定义的文字工作,它也会在通过网络传递并在客户端上进行JSONified时失败。
将来,您可以使用 https://jsonformatter.curiousconcept.com 来确切了解JSON的错误。您也可以使用 https://myjson.com 进行验证,因为它使用的是JSON.parse()
,而不是像 http://jsonlint.com 那样的算法测试你的JSON有效。
所以简单地清理JSON就可以了:
var table = $('#example').DataTable({
ajax: {
url: "https://api.myjson.com/bins/14lrs",
dataSrc: "message",
},
columnDefs: [
{ targets: 0, data: 'entry_id' },
{ targets: 1, data: 'entry_name' }
]
})
演示 - >的 http://jsfiddle.net/3wr2j2yx/ 强>
尝试从http://myjson.com/14lrs抓取已清理的JSON,并将其用作源代码。
我的网址必须是GET方法(我能正确地做到这一点)吗?
是的!
此外,假设我的JSON数据被视为ARRAY。那是对的吗?一世 通过声明告诉数据表数据是从“消息”开始的 “dataSrc”:“消息”,。那是对的吗?
是!
答案 1 :(得分:0)
要查看你的json变成了var_dump或var_export。
比如我们假设您的回复存储在变量$response
$object = json_decode($response);
var_export($object);
var_dump($object);
我们得到以下内容:
stdClass::__set_state(array(
'status' => 'success',
'message' =>
array (
0 =>
stdClass::__set_state(array(
'entry_id' => '1',
'entry_name' => '12345678',
'entry_body' => 'this is just the beginning update',
'entry_date' => '2016-05-01 08:25:51',
'status' => 'active',
'created_timestamp' => '2016-05-01 21:25:51',
'updated_timestamp' => NULL,
)),
1 =>
stdClass::__set_state(array(
'entry_id' => '2',
'entry_name' => 'one one one',
'entry_body' => 'this is just the beginning update 1',
'entry_date' => '2016-05-02 01:44:03',
'status' => 'active',
'created_timestamp' => '2016-05-02 14:44:03',
'updated_timestamp' => NULL,
)),
2 =>
stdClass::__set_state(array(
'entry_id' => '3',
'entry_name' => 'two two two',
'entry_body' => 'this is just the beginning update 2',
'entry_date' => '2016-05-02 01:44:13',
'status' => 'active',
'created_timestamp' => '2016-05-02 14:44:13',
'updated_timestamp' => NULL,
)),
),
))
object(stdClass)#511 (2) {
["status"]=>
string(7) "success"
["message"]=>
array(3) {
[0]=>
object(stdClass)#512 (7) {
["entry_id"]=>
string(1) "1"
["entry_name"]=>
string(8) "12345678"
["entry_body"]=>
string(33) "this is just the beginning update"
["entry_date"]=>
string(19) "2016-05-01 08:25:51"
["status"]=>
string(6) "active"
["created_timestamp"]=>
string(19) "2016-05-01 21:25:51"
["updated_timestamp"]=>
NULL
}
[1]=>
object(stdClass)#513 (7) {
["entry_id"]=>
string(1) "2"
["entry_name"]=>
string(11) "one one one"
["entry_body"]=>
string(35) "this is just the beginning update 1"
["entry_date"]=>
string(19) "2016-05-02 01:44:03"
["status"]=>
string(6) "active"
["created_timestamp"]=>
string(19) "2016-05-02 14:44:03"
["updated_timestamp"]=>
NULL
}
[2]=>
object(stdClass)#514 (7) {
["entry_id"]=>
string(1) "3"
["entry_name"]=>
string(11) "two two two"
["entry_body"]=>
string(35) "this is just the beginning update 2"
["entry_date"]=>
string(19) "2016-05-02 01:44:13"
["status"]=>
string(6) "active"
["created_timestamp"]=>
string(19) "2016-05-02 14:44:13"
["updated_timestamp"]=>
NULL
}
}
}
如您所见,您的结构解析为一个对象,这是一个关联数组,其中包含一个包含一个关联数组对象的数组;
这意味着您无法作为关联数组进行访问。
所以$ object ['message']不会工作,但$ object->消息将起作用: - )
var_dump($var->message[0])
解析为
object(stdClass)#512 (7) {
["entry_id"]=>
string(1) "1"
["entry_name"]=>
string(8) "12345678"
["entry_body"]=>
string(33) "this is just the beginning update"
["entry_date"]=>
string(19) "2016-05-01 08:25:51"
["status"]=>
string(6) "active"
["created_timestamp"]=>
string(19) "2016-05-01 21:25:51"
["updated_timestamp"]=>
NULL
}
您可以像这样访问它: - )
$myobj = $var->message[0]
echo $myobj->status == 'active'
在javascript中它是,
var obj = JSON.parse(message);
myobj = obj.message[0];
echo myobj.status == 'active';
如果您覆盖jquery的ajax调用,您可以看到以下调用已发送到您的服务器(请参阅我的代码段中的代码以了解如何查看此内容)
正如您所看到的,您的参数将作为额外参数发送到服务器。
[对象] 0:对象 cache:false data:对象 dataSrc:“消息” dataType:“json” 错误:(b,c) 成功:(b) 类型:“GET” url:“/ BlogApiV1 / BlogApi / blogs”
你的ajax响应应如下所示:
{
"status":"success",
"data": [
[
"1",
"12345678",
"this is just the beginning update",
"2016-05-01 08:25:51",
"active",
"2016-05-01 21:25:51",
null
],
[
"2",
"one one one",
"this is just the beginning update 1",
"2016-05-02 01:44:03",
"active",
"2016-05-02 14:44:03",
null
],
[
"3",
"two two two",
"this is just the beginning update 2",
"2016-05-02 01:44:13",
"active",
"2016-05-02 14:44:13",
null
]
]
}
请参考datatables示例页面并查看底部的源标签:-)他们举例说明了他们希望格式化的内容: - )
答案 2 :(得分:0)
已经解决了问题。解决方案是根据@ Michael-Dibbets'修复JSON输出。很棒的故障。我实际上正在使用Phil Sturgeon的REST服务器来帮助创建API。默认似乎是JSON输出,但是,正如Michael-Dibbets指出的那样,JSON无效。 REST服务器允许格式,包括xml,csv等等。我没有依赖默认值,而是在URL中特别声明了格式,如/ BlogApiV1 / BlogApi / blogs / format / json,这解决了所有问题。感谢大家的评论,并且肯定从错误中学到了很多。