Pregunta

Estoy tratando de devolver un objeto JSON de una página aspx utilizando Jayrock.JSON. Mi código para escribir a cabo es la siguiente:

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();
    }

Esto está dentro de un bucle rdr.Read().

Las miradas JSON emitidos como esta: (aunque he añadido los saltos de línea manualmente)

{
"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":""
 }

No estoy realmente seguro de lo que estoy haciendo mal, pero en mi página de la lectura de este JSON, cuando trato de hacer .evalJSON (usando PrototypeJS) recibo errores diciendo que el JSON está mal formado. Puede cualquier persona aconsejar a mí lo cambio?

¿Fue útil?

Solución

Este:

"AssignTo":"" 
 } 
 { 

es el JSON válido. Puede una cadena para ver si es válida JSON en JSON pelusa . No estoy seguro de lo que debería ser, pero un objeto vacío iba a ser así (no es necesario "", soportes invertidos, coma que falta):

"AssignTo": 
 { 
 }, 

Otros consejos

El problema es que usted está escribiendo varios objetos JSON mientras que lo que es probable que esté tratando de hacer es producir una matriz JSON JSON de objetos. Dada su fragmento de código, estoy asumiendo rdr tiene alguna aplicación IDataReader como SqlDataReader. Si eso es cierto, entonces es necesario modificar el código para iniciar y finalizar una matriz JSON alrededor del exterior leer lazo, de la siguiente manera:

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 delimitará automáticamente cada valor de objeto JSON con una coma (,) cuando el interior de una matriz JSON por lo que ahora la salida debe parecerse a la siguiente y válida 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":""
    }
]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top