在 .NET 中使用 Jayrock 形成的 JSON 字符串不正确

发布于 2024-08-27 21:41:59 字数 1733 浏览 13 评论 0原文

我正在尝试使用 Jayrock.JSON 从 aspx 页面返回 JSON 对象。 我写出来的代码是这样的:

using (JsonTextWriter writer = new JsonTextWriter(Response.Output))
    {
        writer.WriteStartObject();
        for (int i = 0; i < rdr.FieldCount; i++)
        {
            writer.WriteMember(rdr.GetName(i).ToString());
            writer.WriteString(rdr[i].ToString());
        }
        writer.WriteEndObject();
    }

这是在 rdr.Read() 循环内部。

输出的 JSON 看起来像这样:(虽然我手动添加了换行符)

{
"BugID":"1087",
"AddedBy":"",
"BugDate":"5/2/2010 9:45:34 AM",
"BugTitle":"/admin/ajax_thirdpartylog.asp",
"Classify":""
,"ErrPage":"/admin/ajax_thirdpartylog.asp",
"StoreID":"71",
"UserID":"15438",
"ErrDesc":"Type mismatch: 'formatnumber'",
"ErrDump":"*** VARIABLES DUMP ***\r\n\r\n*** Form Variables ***\r\n\r\ncalmonth : 8\r\ncalmonth2 : 8\r\nfromdate : 8/1/2009\r\ncalyear : 2009\r\ntodate : 8/31/2009\r\ncalyear2 : 2009\r\nr : 978402\r\nthirdtype : 1\r\nButton : Generate Third Party Log\r\n\r\n*** Query String Variables ***\r\n\r\n\r\n\r\n*** REPORT END ***\r\n",
"ErrLine":"74",
"DateFixed":"",
"Counter":"16",
"AssignTo":""
 }
 {
"BugID":"1086",
"AddedBy":"",
"BugDate":"5/1/2010 11:58:54 PM",
"BugTitle":"/admin/Charts/monthsales_s.asp",
"Classify":"",
"ErrPage":"/admin/Charts/monthsales_s.asp",
"StoreID":"402",
"UserID":"141928",
"ErrDesc":"Script timed out",
"ErrDump":"*** VARIABLES DUMP ***\r\n\r\n*** Form Variables ***\r\n\r\n\r\n*** Query String Variables ***\r\n\r\nmonth1 : 9/1/2009\r\nr : 75333803\r\n\r\n\r\n*** REPORT END ***\r\n",
"ErrLine":"0",
"DateFixed":"",
"Counter":"",
"AssignTo":""
 }

我不太确定我做错了什么,但是在我阅读此 JSON 的页面上,当我尝试执行 .evalJSON (使用prototypejs)时,我得到错误表明 JSON 格式错误。 谁能告诉我要改变什么?

I am trying to return a JSON object from an aspx page using Jayrock.JSON.
My code for writing it out is this:

using (JsonTextWriter writer = new JsonTextWriter(Response.Output))
    {
        writer.WriteStartObject();
        for (int i = 0; i < rdr.FieldCount; i++)
        {
            writer.WriteMember(rdr.GetName(i).ToString());
            writer.WriteString(rdr[i].ToString());
        }
        writer.WriteEndObject();
    }

This is inside of an rdr.Read() loop.

The outputted JSON looks like this: (though I added the line breaks manually)

{
"BugID":"1087",
"AddedBy":"",
"BugDate":"5/2/2010 9:45:34 AM",
"BugTitle":"/admin/ajax_thirdpartylog.asp",
"Classify":""
,"ErrPage":"/admin/ajax_thirdpartylog.asp",
"StoreID":"71",
"UserID":"15438",
"ErrDesc":"Type mismatch: 'formatnumber'",
"ErrDump":"*** VARIABLES DUMP ***\r\n\r\n*** Form Variables ***\r\n\r\ncalmonth : 8\r\ncalmonth2 : 8\r\nfromdate : 8/1/2009\r\ncalyear : 2009\r\ntodate : 8/31/2009\r\ncalyear2 : 2009\r\nr : 978402\r\nthirdtype : 1\r\nButton : Generate Third Party Log\r\n\r\n*** Query String Variables ***\r\n\r\n\r\n\r\n*** REPORT END ***\r\n",
"ErrLine":"74",
"DateFixed":"",
"Counter":"16",
"AssignTo":""
 }
 {
"BugID":"1086",
"AddedBy":"",
"BugDate":"5/1/2010 11:58:54 PM",
"BugTitle":"/admin/Charts/monthsales_s.asp",
"Classify":"",
"ErrPage":"/admin/Charts/monthsales_s.asp",
"StoreID":"402",
"UserID":"141928",
"ErrDesc":"Script timed out",
"ErrDump":"*** VARIABLES DUMP ***\r\n\r\n*** Form Variables ***\r\n\r\n\r\n*** Query String Variables ***\r\n\r\nmonth1 : 9/1/2009\r\nr : 75333803\r\n\r\n\r\n*** REPORT END ***\r\n",
"ErrLine":"0",
"DateFixed":"",
"Counter":"",
"AssignTo":""
 }

I'm not really sure what I'm doing wrong, but on my page reading this JSON, when I try to do .evalJSON (using prototypejs) I get errors saying that the JSON is malformed.
Can anyone advise me what to change?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

や三分注定 2024-09-03 21:41:59

"AssignTo":"" 
 } 
 { 

是无效的 JSON。您可以在 JSON Lint 中查看字符串是否是有效的 JSON。我不确定这应该是什么样的,但是一个空对象会是这样的(不需要“”,括号反转,缺少逗号):

"AssignTo": 
 { 
 }, 

This:

"AssignTo":"" 
 } 
 { 

is the invalid JSON. You can a string to see if it's valid JSON at JSON Lint. I'm not sure what this should be like, but an empty object would be like this (don't need "", brackets reversed, missing comma):

"AssignTo": 
 { 
 }, 
活泼老夫 2024-09-03 21:41:59

问题是您正在编写多个 JSON 对象,而您可能正在尝试生成 JSON 对象的 JSON 数组。鉴于您的代码片段,我假设 rdr 拥有一些 IDataReader 实现,例如 SqlDataReader。如果是这样,那么您需要修改代码以在外部 read 循环周围开始和结束 JSON 数组,如下所示:

using (JsonTextWriter writer = new JsonTextWriter(Response.Output))
{        
    writer.WriteStartArray();
    while (rdr.Read())
    {
        writer.WriteStartObject();
        for (int i = 0; i < rdr.FieldCount; i++)
        {
            writer.WriteMember(rdr.GetName(i).ToString());
            writer.WriteString(rdr[i].ToString());
        }
        writer.WriteEndObject();
    }
    writer.WriteEndArray();
}

当在JSON 数组,因此现在输出应类似于以下有效 JSON:

[
    {
        "BugID":"1087",
        "AddedBy":"",
        "BugDate":"5/2/2010 9:45:34 AM",
        "BugTitle":"/admin/ajax_thirdpartylog.asp",
        "Classify":""
        ,"ErrPage":"/admin/ajax_thirdpartylog.asp",
        "StoreID":"71",
        "UserID":"15438",
        "ErrDesc":"Type mismatch: 'formatnumber'",
        "ErrDump":"*** VARIABLES DUMP ***\r\n\r\n*** Form Variables ***\r\n\r\ncalmonth : 8\r\ncalmonth2 : 8\r\nfromdate : 8/1/2009\r\ncalyear : 2009\r\ntodate : 8/31/2009\r\ncalyear2 : 2009\r\nr : 978402\r\nthirdtype : 1\r\nButton : Generate Third Party Log\r\n\r\n*** Query String Variables ***\r\n\r\n\r\n\r\n*** REPORT END ***\r\n",
        "ErrLine":"74",
        "DateFixed":"",
        "Counter":"16",
        "AssignTo":""
    },
    {
        "BugID":"1086",
        "AddedBy":"",
        "BugDate":"5/1/2010 11:58:54 PM",
        "BugTitle":"/admin/Charts/monthsales_s.asp",
        "Classify":"",
        "ErrPage":"/admin/Charts/monthsales_s.asp",
        "StoreID":"402",
        "UserID":"141928",
        "ErrDesc":"Script timed out",
        "ErrDump":"*** VARIABLES DUMP ***\r\n\r\n*** Form Variables ***\r\n\r\n\r\n*** Query String Variables ***\r\n\r\nmonth1 : 9/1/2009\r\nr : 75333803\r\n\r\n\r\n*** REPORT END ***\r\n",
        "ErrLine":"0",
        "DateFixed":"",
        "Counter":"",
        "AssignTo":""
    }
]

The problem is that you are writing multiple JSON objects whereas what you are probably trying to do is produce a JSON array of JSON objects. Given your code snippet, I'm assuming rdr holds some IDataReader implementation like SqlDataReader. If that's true then you need to modify your code to start and end a JSON array around the outer read loop, as follows:

using (JsonTextWriter writer = new JsonTextWriter(Response.Output))
{        
    writer.WriteStartArray();
    while (rdr.Read())
    {
        writer.WriteStartObject();
        for (int i = 0; i < rdr.FieldCount; i++)
        {
            writer.WriteMember(rdr.GetName(i).ToString());
            writer.WriteString(rdr[i].ToString());
        }
        writer.WriteEndObject();
    }
    writer.WriteEndArray();
}

Jayrock will automatically delimit each JSON object value with a comma (,) when inside a JSON array so now the output should resemble the following and valid JSON:

[
    {
        "BugID":"1087",
        "AddedBy":"",
        "BugDate":"5/2/2010 9:45:34 AM",
        "BugTitle":"/admin/ajax_thirdpartylog.asp",
        "Classify":""
        ,"ErrPage":"/admin/ajax_thirdpartylog.asp",
        "StoreID":"71",
        "UserID":"15438",
        "ErrDesc":"Type mismatch: 'formatnumber'",
        "ErrDump":"*** VARIABLES DUMP ***\r\n\r\n*** Form Variables ***\r\n\r\ncalmonth : 8\r\ncalmonth2 : 8\r\nfromdate : 8/1/2009\r\ncalyear : 2009\r\ntodate : 8/31/2009\r\ncalyear2 : 2009\r\nr : 978402\r\nthirdtype : 1\r\nButton : Generate Third Party Log\r\n\r\n*** Query String Variables ***\r\n\r\n\r\n\r\n*** REPORT END ***\r\n",
        "ErrLine":"74",
        "DateFixed":"",
        "Counter":"16",
        "AssignTo":""
    },
    {
        "BugID":"1086",
        "AddedBy":"",
        "BugDate":"5/1/2010 11:58:54 PM",
        "BugTitle":"/admin/Charts/monthsales_s.asp",
        "Classify":"",
        "ErrPage":"/admin/Charts/monthsales_s.asp",
        "StoreID":"402",
        "UserID":"141928",
        "ErrDesc":"Script timed out",
        "ErrDump":"*** VARIABLES DUMP ***\r\n\r\n*** Form Variables ***\r\n\r\n\r\n*** Query String Variables ***\r\n\r\nmonth1 : 9/1/2009\r\nr : 75333803\r\n\r\n\r\n*** REPORT END ***\r\n",
        "ErrLine":"0",
        "DateFixed":"",
        "Counter":"",
        "AssignTo":""
    }
]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文