Javascript 如何将字符串转换为JSON对象

Javascript 如何将字符串转换为JSON对象,javascript,jquery,json,asp.net-mvc-3,Javascript,Jquery,Json,Asp.net Mvc 3,timeline.js+MVC+Ajax+JSON 你好, 将字符串转换为Json对象时出现问题 我必须在我的网页上显示时间线,我使用了timeline.js,我能够使用静态数据运行时间线,如下所示 静态数据 现在当我这么做的时候 alert(data); 它给了我 [object Object],[object Object],[object Object] 但现在我必须显示数据库中的数据,所以我在控制器上调用以下函数 控制器上的GetTimeLine方法 函数调用控制器方法 它给了我以下

timeline.js+MVC+Ajax+JSON

你好,

将字符串转换为Json对象时出现问题

我必须在我的网页上显示时间线,我使用了timeline.js,我能够使用静态数据运行时间线,如下所示

静态数据 现在当我这么做的时候

alert(data);
它给了我

[object Object],[object Object],[object Object]
但现在我必须显示数据库中的数据,所以我在控制器上调用以下函数

控制器上的GetTimeLine方法 函数调用控制器方法 它给了我以下警告

[{'start': new Date(2012,2,11,0,0,0),'content':'Parents meeting'},{'start': new Date(2012,2,15,0,0,0),'content':'Exam Meeting'}];
所以问题是字符串到Json对象的转换


如何将控制器返回的字符串转换为视图上的Json对象…

服务器返回的内容无效。或者给出您的服务器端代码,它可能是有效的JSON,它只定义一个字符串而不是一个对象图。在JSON中:

  • 所有对象键必须使用双引号,而不是单引号
  • 所有字符串必须使用双引号,而不是单引号
  • 新日期(…)
    无效(JSON没有任何日期概念)
我相信您希望构建一个数组(不是字符串)并将其分配给
jr.Data
,然后让它为您处理序列化(但我在ASP.net MVC中没有这样做)


一旦服务器返回有效的JSON,请确保它返回的内容类型正确(值为
application/JSON
)。当您这样做时,jQuery将看到它是JSON,并将其反序列化为一个对象图。如果您不能或不想让服务器返回有效的JSON,请在
ajax
调用中添加
dataType:'JSON'
,以强制执行此操作。

服务器返回的内容无效。或者给出您的服务器端代码,它可能是有效的JSON,它只定义一个字符串而不是一个对象图。在JSON中:

  • 所有对象键必须使用双引号,而不是单引号
  • 所有字符串必须使用双引号,而不是单引号
  • 新日期(…)
    无效(JSON没有任何日期概念)
我相信您希望构建一个数组(不是字符串)并将其分配给
jr.Data
,然后让它为您处理序列化(但我在ASP.net MVC中没有这样做)


一旦服务器返回有效的JSON,请确保它返回的内容类型正确(值为
application/JSON
)。当您这样做时,jQuery将看到它是JSON,并将其反序列化为一个对象图。如果您不能或不想让服务器返回有效的JSON,请在
ajax
调用中添加
dataType:'JSON'
,强制执行。

您工作太辛苦了。让框架为您做这件事

public JsonResult GetTimeline()
{
     var timeline = objEntities.TimeLines.Where( tl => tl.StudentID == Sessions.StudentID )
                                         .ToList() //required due to Convert call
                                         .Select( tl => new
                                          {
                                               start = Convert.ToDateTime(tl.CalculatedDate),
                                               content = tl.Description
                                          });
     return Json( timeline, JsonRequestBehavior.AllowGet );
}
然后使用
getJSON
(因为您特别允许gets),或者在请求中指定
dataType:'json'

$.getJSON( '@Url.Action("gettimeline","student")', function(data) {
     alert(data);
});

你工作太辛苦了。让框架为您做这件事

public JsonResult GetTimeline()
{
     var timeline = objEntities.TimeLines.Where( tl => tl.StudentID == Sessions.StudentID )
                                         .ToList() //required due to Convert call
                                         .Select( tl => new
                                          {
                                               start = Convert.ToDateTime(tl.CalculatedDate),
                                               content = tl.Description
                                          });
     return Json( timeline, JsonRequestBehavior.AllowGet );
}
然后使用
getJSON
(因为您特别允许gets),或者在请求中指定
dataType:'json'

$.getJSON( '@Url.Action("gettimeline","student")', function(data) {
     alert(data);
});

我认为您需要再看看JSON对象及其语法。如果它是用Javascript中的
[
]
包装的,那么它是一个数组,而不是一个对象(JSON或其他)。@AnthonyGrist:将数组作为顶级对象是有效的JSON。(然而,带引号的字符串不是,不是那些单引号,并且
新日期(…)
在那里。)@T.J.Crowder看来我是需要重新检查语法的人,那么@IT ppl:没有a这样的东西(好吧,在一些浏览器中,有
parseJSON
stringify
方法,但这显然不是你要问的)。有JS对象、对象文本和JSON。AJAX请求的结果是一个JSON字符串。@AnthonyGrist:是的,嗯,有点不清楚。更明确地说,顶层可以是对象或数组。有趣的是,进一步说,它可以是任何JSON值(因此它本身只包含一个字符串或数字)。如果它是用Javascript中的
[
]
包装的,那么它是一个数组,而不是一个对象(JSON或其他)。@AnthonyGrist:将数组作为顶级对象是有效的JSON。(然而,带引号的字符串不是,不是那些单引号,并且
新日期(…)
在那里。)@T.J.Crowder看来我是需要重新检查语法的人,那么@IT ppl:没有a这样的东西(好吧,在一些浏览器中,有
parseJSON
stringify
方法,但这显然不是你要问的)。有JS对象、对象文本和JSON。AJAX请求的结果是一个JSON字符串。@AnthonyGrist:是的,嗯,有点不清楚。更明确地说,顶层可以是对象或数组。有趣的是,更进一步说,它可以是任何JSON值(因此它本身只包含一个字符串或数字)。是的,我想从控制器返回可由timeline.js使用的数组,还有其他方法吗?@ITppl:正如我所说的:“我相信你想建立一个数组(而不是字符串)并将其分配给
jr.Data
,然后让
JsonResult
对象为您处理序列化“是的,我想从控制器返回可由timeline.js使用的数组,还有其他方法吗?@ITppl:正如我所说的:“我相信您想要构建一个数组(而不是字符串)并将其分配给
jr.Data
,然后让
JsonResult
对象为您处理序列化“gettimeline方法给出以下错误-
$.getJSON( '@Url.Action("gettimeline","student")', function(data) {
     alert(data);
});