JSON字符串格式的未知问题

时间:2011-11-07 21:16:16

标签: fullcalendar

我通过JSON将数据传递给我的FullCalendar实现。

我的Feed看起来不错,但由于某种原因,日历不会显示任何数据。

以下是我的JSON Feed的示例:

[{
  "title":"Resourse for Paths ",
  "start":"2011-11-08T07:30:00Z",
  "end":"2011-11-08T10:30:00Z",
  "allDay":false
}]

根据FullCalendar手册,一切看起来都不错,但我根本没有数据。

有没有人看到我不知道的任何事情?

以下是生成Feed的代码:

 Private Function makejsonoftable(ByVal table As DataTable, ByVal e As makejson) As String
    Dim sb As New StringBuilder()
    Dim cultureName As String = "en-US"
    Dim culture As CultureInfo = New CultureInfo(cultureName)
    Dim fieldvalue As String
    For Each dr As DataRow In table.Rows
        If sb.Length <> 0 Then
            sb.Append(",")
        End If
        sb.Append("{")
        Dim sb2 As New StringBuilder()
        For Each col As DataColumn In table.Columns
            Dim fieldname As String = col.ColumnName

            If TypeOf (dr(fieldname)) Is Boolean Then
                fieldvalue = Convert.ToBoolean(dr(fieldname))
            Else
                If TypeOf (dr(fieldname)) Is DateTime Then
                    fieldvalue = Convert.ToDateTime(dr(fieldname))
                Else
                    fieldvalue = dr(fieldname).ToString()
                End If
            End If

            If sb2.Length <> 0 Then
                sb2.Append(",")
            End If
            If TypeOf (dr(fieldname)) Is Boolean Then
                sb2.Append(String.Format("""{0}"":{1}", fieldname, fieldvalue.ToLower))
            Else
                If TypeOf (dr(fieldname)) Is DateTime Then
                    sb2.Append(String.Format("""{0}"":""{1:ddd, dd MMM yyyy HH':'mm':'ss 'EST'}""", fieldname, Convert.ToDateTime(fieldvalue)))
                Else
                    sb2.Append(String.Format("""{0}"":""{1}""", fieldname, fieldvalue))
                End If
            End If


        Next
        sb.Append(sb2.ToString())

        sb.Append("}")
    Next
    If e = makejson.e_with_square_brackets Then
        sb.Insert(0, "[")
        sb.Append("]")
    End If
    Return sb.ToString()


End Function

Public Enum makejson
    e_without_square_brackets
    e_with_square_brackets
End Enum

由于

3 个答案:

答案 0 :(得分:1)

就在前几天,我正在进行一些调试,并将一些换行/回车引入到一些用于AJAX响应的JSON中。 Safari并不介意,但Firefox不喜欢它,因为换行和回车都不是有效的JSON,所以这很可能是你的问题。

答案 1 :(得分:1)

我认为问题是围绕变量的引用(又名:title,start,end和allday)。删除引号,看看会发生什么。

编辑:文档中的示例

$('#calendar').fullCalendar({

    eventSources: [

        // your event source
        {
            url: '/myfeed.php', // use the `url` property
            color: 'yellow',    // an option!
            textColor: 'black'  // an option!
        }

        // any other sources...

    ]

});

答案 2 :(得分:1)

我的FullCalendar JSON Feed是用PHP编写的。我从MySQL数据库中获取事件信息并在PHP中对其进行格式化,并将其作为日历的JSON文件输出。这是代码的一部分:

$jsonfeed = "[
";
while($row = mysql_fetch_array($result))
{
// some formatting happens here, then:
  $jsonfeed .= "
    {
    \"title\"   : \"" . $this_group . "\",
     \"start\"   : \"" . $row[formatDate] . " " . $row[formatStart] . "\",
     \"end\"     : \"" . $row[formatDate] . " " . $row[formatFinish] . "\",
     \"description\"    : \"" . $description . "\",
     \"url\" : \"http://mysite.com/" . $row[id] . "\",
     \"allDay\"  : false
   },";
}
// remove the final comma, add final ]
$jsonfeed = substr($jsonfeed, 0, -1) . "
]
";

经过多次变化之后,这最终为我工作了。显然,我需要有这些换行符(没有它们就行不通)。所以,这可能是你想要尝试的。另外,我使用的是当地时区,所以我不需要最后的“Z”,而且我在日期和时间之间有一个空格而不是“T”。我不知道这是否会影响您的代码,但这是其他尝试。

另外,您是否尝试过将JSON代码通过验证器进行检查?