تشكلت سلسلة JSON بشكل غير صحيح باستخدام Jayrock في .NET

StackOverflow https://stackoverflow.com/questions/2579085

  •  24-09-2019
  •  | 
  •  

سؤال

أحاول إعادة كائن JSON من صفحة ASPX باستخدام Jayrock.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 (باستخدام النموذج الأولي) ، أحصل على أخطاء تقول إن JSON مشوه. هل يمكن لأي شخص أن ينصحني بما يجب تغييره؟

هل كانت مفيدة؟

المحلول

هذه:

"AssignTo":"" 
 } 
 { 

هو JSON غير صالح. يمكنك سلسلة لمعرفة ما إذا كانت صالحة JSON في JSON LINT. لست متأكدًا من ما يجب أن يكون عليه هذا ، لكن كائن فارغ سيكون مثل هذا (لا تحتاج إلى "" ، عكس قوسين ، فاصلة مفقودة):

"AssignTo": 
 { 
 }, 

نصائح أخرى

المشكلة هي أنك تكتب العديد من كائنات JSON في حين أن ما تحاول القيام به هو إنتاج مجموعة JSON من كائنات JSON. بالنظر إلى مقتطف الرمز الخاص بك ، أفترض rdr يحمل بعض IDataReader تنفيذ مثل SqlDataReader. إذا كان هذا صحيحًا ، فأنت بحاجة إلى تعديل الكود الخاص بك لبدء وإنهاء صفيف 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();
}

ستقوم Jayrock تلقائيًا بتحديد كل قيمة كائن JSON مع فاصلة () عندما يكون داخل صفيف 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":""
    }
]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top