Javascript 使用包中{}附近带[]的YUI解析JSON
我对JSON、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":
[{“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