簡體   English   中英

如何將字符串轉換為JSON對象

[英]How to convert string to JSON Object

timeline.js + MVC + Ajax + JSON

你好,

將字符串轉換為Json對象時遇到問題

我必須在網頁上顯示時間軸,我也使用了Timeline.js,我可以使用如下靜態數據來運行時間軸

靜態數據

// Create a JSON data table
data = [
{
        'start': new Date(2010, 7, 23),
    'content': 'Conversation'
},
{
    'start': new Date(2010, 7, 23),
    'content': 'New Conversation'
},
{
    'start': new Date(2010, 7, 23),
    'content': 'Very New Conversation'
}

現在,當我做

alert(data);

它給我

[object Object],[object Object],[object Object]

但是現在我必須顯示數據庫中的數據,所以我在控制器上調用以下函數

控制器上的GetTimeLine方法

public JsonResult GetTimeline()
{
      JsonResult jr = new JsonResult();
      var objtimeline = objEntities.Timelines.Where(tl => tl.StudentID == Sessions.StudentID).ToList().AsQueryable();
      String newstr = "[";
      foreach(var tml in objtimeline)
      {
            DateTime date1 = Convert.ToDateTime(tml.CalculatedDate);
            newstr += "{'start': new  Date("+date1.Year+","+date1.Month+","+date1.Day+","+date1.Hour+","+date1.Minute+","+date1.Second+"),'content':'"+tml.Description+"'},";
      }
      newstr = newstr.TrimEnd(',');
      newstr += "];";
      jr.Data = newstr;
      jr.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
      return jr;
}

函數調用控制器方法

jQuery.ajax({
    type: "POST",
    url: "@Url.Content("~/Student/GetTimeline")",
    success: function (result) {
        data = result;
    },
});
alert(data);

它給我以下警報

[{'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 Object,

如何在我的視圖中將從控制器返回的字符串轉換為Json Object ...

你辛苦了 讓框架為您完成。

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 (因為您明確允許獲取),要么在請求中指定dataType: 'json'

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

服務器返回的內容無效的JSON 或提供您的服務器端代碼,它可能是僅定義字符串而不是對象圖的有效JSON。 在JSON中:

  • 所有對象鍵都必須使用引號,而不是單引號。
  • 所有字符串必須用引號引起來,而不是單引號。
  • new Date(...)無效(JSON沒有任何日期概念)。

我相信您想建立一個數組(而不是字符串)並將其分配給jr.Data ,然后讓JsonResult對象為您處理序列化(但是我在ASP.net MVC中沒有做到這一點)。

一旦服務器返回有效的JSON,請確保服務器使用正確的Content-Type標頭(值為application/json )返回它。 當您這樣做時,jQuery將看到它是JSON並將其反序列化為對象圖。 如果您不能或不想讓服務器返回有效的JSON,請在ajax調用中添加dataType: 'json'以強制使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM