Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用包中{}附近带[]的YUI解析JSON_Javascript_Ajax_Yui - Fatal编程技术网

Javascript 使用包中{}附近带[]的YUI解析JSON

Javascript 使用包中{}附近带[]的YUI解析JSON,javascript,ajax,yui,Javascript,Ajax,Yui,我对JSON、javascript和YUI还很陌生,还试图完成家庭作业。我有一个JSON包的形式 [{“id”:“1234”,“name”:“some description”,“description”:“url”:“www.sd.com”},{与前一个格式相同}] 我尝试了一个YUI的例子,以pase一个jsonString,如下所示: var jsonString = '{"id":"1234", "name":"some description","description":"url":

我对JSON、javascript和YUI还很陌生,还试图完成家庭作业。我有一个JSON包的形式

[{“id”:“1234”,“name”:“some description”,“description”:“url”:“www.sd.com”},{与前一个格式相同}]

我尝试了一个YUI的例子,以pase一个jsonString,如下所示:

var jsonString = '{"id":"1234", "name":"some description","description":"url":"www.sd.com"}';
var messages = [];
messages = YAHOO.lang.JSON.parse(jsonString);
{"id":"1234", "name":"some description", "description":"testing", "url":"www.sd.com"}
然后我将结果打印在messages[]中。在jsonString示例中,我得到了输出。当我试图从教授的web服务器上进行解析时,我在解析上失败了。我猜这是因为他的包被一个[]包围,而我的包不在我的示例中。我试过了

YAHOO.lang.JSON.parse(professorResponse[0])

这也返回了一个错误。我想知道这个场景中的最佳格式/实践是什么,如何处理从web服务器传回的数据,如何格式化数据,以便对其进行解析。我在这方面没有经验,我想有一个好的开始。谢谢

编辑:

To parse the web server's response, I'm doing this:

function sendRequest() {
  var url = "class website&response=JSON";
  var callback = {success:handleResponse, failure:handleFailure, timeout:5000};
  var transaction = YAHOO.util.Connect.asyncRequest("GET", url, callback, null);
}

// this gets called when my handleResponse methods looks if it's JSON vs XML and sees that the server's response is JSON
function parseJSONResponse(response) {
  var messages = [];
  try {
    messages = YAHOO.lang.JSON.parse(response);
  }
  catch (e) {
    alert("JSON parse failed");
    return;
  }
}

当我尝试解析响应时,我继续得到JSON解析失败

这不是有效的JSON,每个键都需要一个值。“描述”缺少一个值

它应该是这样的:

var jsonString = '{"id":"1234", "name":"some description","description":"url":"www.sd.com"}';
var messages = [];
messages = YAHOO.lang.JSON.parse(jsonString);
{"id":"1234", "name":"some description", "description":"testing", "url":"www.sd.com"}

这不是有效的JSON,每个键都需要一个值。“描述”缺少一个值

它应该是这样的:

var jsonString = '{"id":"1234", "name":"some description","description":"url":"www.sd.com"}';
var messages = [];
messages = YAHOO.lang.JSON.parse(jsonString);
{"id":"1234", "name":"some description", "description":"testing", "url":"www.sd.com"}

Well[]是一个数组,{}是一个对象

因此,如果你有以下几点:

var jsonString =='{"id":"1234", "name":"some description","description":"url":"www.sd.com"}';
jsonString.id
将返回1234

在上面的例子中:

var someData = [{"id":"1234", "name":"some description","description":"url":"www.sd.com"}, {same format as previous one}]
您可以使用:


someData[0].id
获取第一个对象的id。

Well[]是一个数组,{}是一个对象

因此,如果你有以下几点:

var jsonString =='{"id":"1234", "name":"some description","description":"url":"www.sd.com"}';
jsonString.id
将返回1234

在上面的例子中:

var someData = [{"id":"1234", "name":"some description","description":"url":"www.sd.com"}, {same format as previous one}]
您可以使用:


someData[0].id
获取第一个对象的id。

您的示例和教授的示例都是无效的JSON,无法解析,因为它们都包含一个没有值的“description”属性:

... "description":"url":"www.sd.com" ...
应该是:

... "description": "somevalue", "url":"www.sd.com" ...
(或仅删除
“说明”:

我的回答的其余部分假设在继续之前可以解决上述问题

您不会解释如何获得教授的JSON,或者如何生成输出,但一般来说,JSON是对象或数组的字符串表示形式,您可以解析它以创建实际的对象或数组。您的示例是对象的表示。你教授的例子是一个对象数组的表示

错误之处在于,您似乎试图将
professorResponse
视为一个数组,并在解析之前使用
professorResponse[0]
访问其元素0,但如果它是JSON,则它是一个表示数组的字符串,而不是实际数组,因此您需要首先解析它:

// get professorResponse from server somehow
var professorResponse = '[{"id":"1234", "name":"some description","description":"fixed","url":"www.sd.com"}, {same format as previous one}]';

var parsedResponse = YAHOO.lang.JSON.parse(professorResponse);

// now parsedResponse is an array of objects, so
parsedResponse.length   // is 2 - there are two elements
parsedResponse[0]       // is first element, i.e., {"id":"1234", "name":"some description","description":"url":"www.sd.com"}
parsedResponse[1]       // is second element
parsedResponse[0].id    // is "1234"
parsedResponse[0].name  // is "some description"
注意:在您的示例中,您初始化
messages
以引用空数组,但随后立即将其赋值为
YAHOO.lang.JSON.parse(jsonString)
的返回值,在本例中,它将不是数组(因为您的jsonString表示的对象不是数组)-您原来的空数组被丢弃

“如何处理从web服务器传回的数据,如何格式化数据,以便我可以对其进行分析。”


如果web服务器返回的是有效的JSON,则无需对其进行格式化即可进行解析-它已经是一个字符串,其格式可以使用
JSON进行解析。parse()

您的示例和教授的示例都是无效的JSON,无法解析,因为它们都包含一个没有值的“description”属性:

... "description":"url":"www.sd.com" ...
应该是:

... "description": "somevalue", "url":"www.sd.com" ...
(或仅删除
“说明”:

我的回答的其余部分假设在继续之前可以解决上述问题

您不会解释如何获得教授的JSON,或者如何生成输出,但一般来说,JSON是对象或数组的字符串表示形式,您可以解析它以创建实际的对象或数组。您的示例是对象的表示。你教授的例子是一个对象数组的表示

错误之处在于,您似乎试图将
professorResponse
视为一个数组,并在解析之前使用
professorResponse[0]
访问其元素0,但如果它是JSON,则它是一个表示数组的字符串,而不是实际数组,因此您需要首先解析它:

// get professorResponse from server somehow
var professorResponse = '[{"id":"1234", "name":"some description","description":"fixed","url":"www.sd.com"}, {same format as previous one}]';

var parsedResponse = YAHOO.lang.JSON.parse(professorResponse);

// now parsedResponse is an array of objects, so
parsedResponse.length   // is 2 - there are two elements
parsedResponse[0]       // is first element, i.e., {"id":"1234", "name":"some description","description":"url":"www.sd.com"}
parsedResponse[1]       // is second element
parsedResponse[0].id    // is "1234"
parsedResponse[0].name  // is "some description"
注意:在您的示例中,您初始化
messages
以引用空数组,但随后立即将其赋值为
YAHOO.lang.JSON.parse(jsonString)
的返回值,在本例中,它将不是数组(因为您的jsonString表示的对象不是数组)-您原来的空数组被丢弃

“如何处理从web服务器传回的数据,如何格式化数据,以便我可以对其进行分析。”


如果web服务器返回的是有效的JSON,则无需为解析它而对其进行格式化-它将已经是一个可以用
JSON.parse()解析的格式的字符串。

您可以发布您从教授的web服务器获得的确切字符串吗?@phatskat查看Firebug=
[$“id:“1234”,“name:“google”,“url:”的确切字符串“google.com”}]
你能发布你从教授的web服务器上得到的确切字符串吗?@phatskat查看Firebug的确切字符串=
[$“id”:“1234”,“name”:“google”,“url”:“google.com”}]
我添加了代码,显示我如何解析响应,如果这有助于调试我的问题,我会立即得到一个错误。谢谢。如果
响应
[$“id”:“1234”,“name”:“google”,“url”:“google.com”}]
根据您上面的评论,问题是
$
靠近开始处-应该是
{
。我添加了代码,显示如何解析响应,如果有助于调试我的问题,我会立即得到错误。Tha