解析JSON数组对象
我需要将从C#代码获得的一组值存储到一个javascript数组中。 我得到一个错误..有人可以告诉错误是什么? 即时通讯使用此jcode。解析JSON数组对象
$.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}]}
这里是生成JSON我的C#代码
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());
}
如果你得到json
然后指定dataType
等于json as 4th argument in
$不用彷徨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');
更新
the 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
}
]
}
会尝试让你知道.. – 2012-01-17 15:52:27
+1。当然,如果JSON格式正确,这仍然只能工作。 – StriplingWarrior 2012-01-17 16:02:16
现在预计错误 - }:P json已被更新超过 – 2012-01-17 16:15:26
你需要两个类-call他们ROVAL和客户,为示例 - 并将其定义为这样:
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);
我必须在asp 1.1中开发我的应用程序,它没有javascriptserializer – 2012-01-17 15:50:43
如果可能的话(我不知道JSON.NET是否支持1.1)使用JSON.NET。你应该相应地标记你的问题。 – Icarus 2012-01-17 15:52:06
什么是你的问题? – ShankarSangoli 2012-01-17 15:45:50
你能编辑和发布你用来创建(错误)JSON对象的C#代码吗?看看引号和空格,你会发现它们不匹配:''CustomerID“:”25“Title”:“”Mr.“ “名字”:“”唐纳德“”'... – msanford 2012-01-17 15:47:36
对不起。张贴错误的JSON ..已纠正 – 2012-01-17 15:48:13