2017-04-13 48 views
1

我想解析Json字符串並收集其中存在的數組值。獲取jqGrid ajax在C#中嵌套JSON字符串的數組由Newtonsoft Json

{"_search":true,"nd":1492064211841,"rows":30,"page":1,"sidx":"","sord":"asc","filters":"{\"groupOp\":\"OR\",\"rules\":[{\"field\":\"Emp_ID\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"Name\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"Designation\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"City\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"State\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"Country\",\"op\":\"cn\",\"data\":\"ASAS\"}]}"} 

PS: Above string is coming from jqGrid Ajax to the WebMethod in C#.

我不是在得到越來越成功過濾器 - >規則[0] - >數據

我已經試過:

dynamic jObj = JObject.Parse(postData); 
var data = jObj.filters.rules[0].data; 

出現錯誤:「Newtonsoft.Json.Linq.JValue」不包含「規則」的定義。

dynamic jObj = JObject.Parse(postData); 
var filters = jObj.filters; //Sucess: getting filters here 
var rules1 = filters["rules"]; //Error: 'Newtonsoft.Json.Linq.JValue' does not contain a definition for 'rules'. 
var rules2 = filters.rules; //Error: 'Newtonsoft.Json.Linq.JValue' does not contain a definition for 'rules'. 

如何獲得內部值過濾器 - >規則過濾器 - >規則[0] - >數據

+0

你肯定'postData'有字符串類型,因此'JObject.Parse(postData)'是必需的?如果你真的需要製作'JObject.Parse(postData)',那麼你仍然需要**秒解析'動態過濾器= JObject.Parse(jObj.filters);'而不是'var filters = jObj.filters; ' – Oleg

+0

謝謝奧列格! :) –

+0

不客氣! – Oleg

回答

1

必須解析內部對象是這樣的:

var obj = "{\"_search\":true,\"nd\":1492064211841,\"rows\":30,\"page\":1,\"sidx\":\"\",\"sord\":\"asc\",\"filters\":\"{\\\"groupOp\\\":\\\"OR\\\",\\\"rules\\\":[{\\\"field\\\":\\\"Emp_ID\\\",\\\"op\\\":\\\"cn\\\",\\\"data\\\":\\\"ASAS\\\"},{\\\"field\\\":\\\"Name\\\",\\\"op\\\":\\\"cn\\\",\\\"data\\\":\\\"ASAS\\\"},{\\\"field\\\":\\\"Designation\\\",\\\"op\\\":\\\"cn\\\",\\\"data\\\":\\\"ASAS\\\"},{\\\"field\\\":\\\"City\\\",\\\"op\\\":\\\"cn\\\",\\\"data\\\":\\\"ASAS\\\"},{\\\"field\\\":\\\"State\\\",\\\"op\\\":\\\"cn\\\",\\\"data\\\":\\\"ASAS\\\"},{\\\"field\\\":\\\"Country\\\",\\\"op\\\":\\\"cn\\\",\\\"data\\\":\\\"ASAS\\\"}]}\"}"; 
dynamic jObj = JObject.Parse(obj); 
var data = JObject.Parse(jObj.filters.Value); 
var test = data.rules; 
Console.WriteLine(data); 
Console.ReadLine(); 
+0

太棒了。非常感謝! –

+0

我很高興幫助。祝你有美好的一天 ! –

1

我沒有關於C#的知識,但我試圖把它的JavaScript

在你的JSON,在過濾器領域不正確is'nt JSON是字符串

我有這樣做JavaScript或許它會幫助你的

var a = {"_search":true,"nd":1492064211841,"rows":30,"page":1,"sidx":"","sord":"asc","filters":"{\"groupOp\":\"OR\",\"rules\":[{\"field\":\"Emp_ID\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"Name\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"Designation\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"City\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"State\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"Country\",\"op\":\"cn\",\"data\":\"ASAS\"}]}"} 

console.log(a.filters) 

是回報

"{"groupOp":"OR","rules":[{"field":"Emp_ID","op":"cn","data":"ASAS"},{"field":"Name","op":"cn","data":"ASAS"},{"field":"Designation","op":"cn","data":"ASAS"} 

,它是字符串現在我再次解析成它JSON

b = JSON.parse(a.filters) 
console.log(b.rules) 

現在它返回規則對象

+0

JSON字符串來自jqGrid,我沒有做任何修改與字符串發送到C#之前。所以字符串格式應該是正確的。過濾器字段中有哪些錯誤?過濾器字段我能夠得到(正如我在主要話題中所說的)。其實我無法獲得「規則」字段。 –