Разбор массива JSON объектов - PullRequest
2 голосов
/ 17 января 2012

Мне нужно сохранить набор значений, которые я получаю из моего кода C #, в массив javascript. Я получаю сообщение об ошибке. Может кто-нибудь сказать, что это за ошибка? Я использую этот jcode.

 $.get('Dataextract.aspx', function (data, textStatus) {
        alert('Status is ' + textStatus);//success
        alert('JSON data string is: ' + data);//string as below

    var JSONdata = data;
    eval(JSONdata);//error here-> expected ;
    alert(JSONdata.rowval[0].CustomerID);

}, 'text');

Я использую ajax-запрос для получения массива объекта JSON. значение объектов данных, которое я получаю, выглядит как строка.

{"rowval" :[{"CustomerID":12"Title":"Mr.""FirstName":"Johnny""MiddleName":"A.""LastName":"Caprio""CompanyName":"Bikes and Motorbikes""RowNumber":10},{"CustomerID":16"Title":"Mr.""FirstName":"Christopher""MiddleName":"R.""LastName":"Beck""CompanyName":"Bulk Discount Store""RowNumber":11},{"CustomerID":18"Title":"Mr.""FirstName":"David""MiddleName":"J.""LastName":"Liu""CompanyName":"Catalog Store""RowNumber":12},{"CustomerID":19"Title":"Mr.""FirstName":"John""MiddleName":"A.""LastName":"Beaver""CompanyName":"Center Cycle Shop""RowNumber":13},{"CustomerID":20"Title":"Ms.""FirstName":"Jean""MiddleName":"P.""LastName":"Handley""CompanyName":"Central Discount Store""RowNumber":14},{"CustomerID":21"Title":"FirstName":"Jinghao""MiddleName":"LastName":"Liu""CompanyName":"Chic Department Stores""RowNumber":15},{"CustomerID":22"Title":"Ms.""FirstName":"Linda""MiddleName":"E.""LastName":"Burnett""CompanyName":"Travel Systems""RowNumber":16},{"CustomerID":23"Title":"Mr.""FirstName":"Kerim""MiddleName":"LastName":"Hanif""CompanyName":"Bike World""RowNumber":17},{"CustomerID":24"Title":"Mr.""FirstName":"Kevin""MiddleName":"LastName":"Liu""CompanyName":"Eastside Department Store""RowNumber":18},{"CustomerID":25"Title":"Mr.""FirstName":"Donald""MiddleName":"L.""LastName":"Blanton""CompanyName":"Coalition Bike Company""RowNumber":19},{"CustomerID":28"Title":"Ms.""FirstName":"Jackie""MiddleName":"E.""LastName":"Blackwell""CompanyName":"Commuter Bicycle Store""RowNumber":20}]}

Вот мой код на C #, который генерирует JSON

sb.Append("{\"rowval\" :");
            sb.Append("[");
            if (table != null)
            {
                foreach (DataRow row in table.Rows)
                {
                    sb.Append("{");
                    if (row.Table != null && row.Table.Columns != null && row.Table.Columns.Count > 0)
                    {
                        foreach (DataColumn column in row.Table.Columns)
                        {
                            parseMember(row[column], column.ColumnName, sb);
                        }
                    }
                    sb.Append("},");
                }
            }
            sb.Append("]");
            sb.Append("}");

            sqlcon.Close();
            Response.Write(sb);



        }

        private static void parseMember(object val, string memberName, StringBuilder sb)
        {
            Type t = val.GetType();

            if (memberName != null && memberName.Trim().Length > 0)
                sb.AppendFormat("\"{0}\":", memberName);
            if (typeof(string) == t || typeof(char) == t)
                sb.AppendFormat("\"{0}\"", val.ToString());
            else
                sb.AppendFormat("{0}", val.ToString());
        }

Ответы [ 2 ]

2 голосов
/ 17 января 2012

если вы получаете json, тогда указав dataType равный json as 4th argument in $. Get will parse the json which you can iterate using the each` метод jquery, например

 $.get('Dataextract.aspx', function (data, textStatus) {
        alert('Status is ' + textStatus);//success
        alert('JSON data string is: ' + data);//string as below
    // no need for eval
   // var JSONdata = data;
   // eval(JSONdata);//error here-> expected ;
    alert(JSONdata.rowval[0].CustomerID);

}, "json"); // <-- 

или вы можете разобрать json явно как

 $.get('Dataextract.aspx', function (data, textStatus) {
        alert('Status is ' + textStatus);//success
        alert('JSON data string is: ' + data);//string as below

    var JSONdata = $.parseJSON(data);
   // eval(JSONdata);//error here-> expected ;  again no need for the eval
    alert(JSONdata.rowval[0].CustomerID);

}, 'text');

обновление

json, который вы формируете, неверен, для проверки вашего json вы можете посетить www.jsonlint.com , это действительный json

{
    "rowval": [
        {
            "CustomerID": 12,  // <-- you are missing the commas 
            "Title": "Mr.",
            "FirstName": "Johnny",
            "MiddleName": "A.",
            "LastName": "Caprio",
            "CompanyName": "Bikes and Motorbikes",
            "RowNumber": 10
        }
    ]
}
0 голосов
/ 17 января 2012

Вам нужны два класса - например, вызовите их RoVal и Customer - и определите их так:

class RowVal
{

    public List<Customer> Customers {get;set;}
}

class Customer
{
   public int ID {get;set;}
   public string Title{get;set;}
   public string FirstName {get;set;}
   //and so on

}

Теперь вы можете десериализовать эту строку JSON следующим образом:

JavascriptSerializer serializer = new JavascriptSerializer();
RowVal rowVal =    serializer.Deserialize<RowVal>(yourJSonstring);
...