2017-04-13 3 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#.

私はfilters->ルールを得ることに成功が届かない[0] - >データ

私が試したもの:

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

エラーが発生しました: 'Newtonsoft.Json.Linq.JValue'に 'rules'の定義が含まれていません。

内の値を取得する方法
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'. 

filters->filters->ルールを支配する[0] - >データ

+0

は 'postData'、あなたが確かにあります文字列型のため、 'JObject.Parse(postData)'が必要ですか? 'JObject.Parse(postData)'を実際に作成する必要がある場合は、 'var filters = jObj.filters;ではなく、' dynamic filters = JObject.Parse(jObj.filters); ' – Oleg

+0

オレグありがとう! :) –

+0

あなたは大歓迎です! – Oleg

答えて

1

オブジェクトあなたは、このような内部オブジェクトを解析する必要があり、今ではルールを返します。今、私は再びJSON

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

上でそれに解析しています:

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#の知識を持っていないが、私はないis'nt適切なJSONフィルタフィールドに、あなたのJSONではJavaScriptの

上でそれに試してみましたが、それは私がこれを行うしている文字列

ですJavaScriptのそれは戻っ

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

、それであるあなたに

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) 

をだのを助けるかもしれません文字列が

+0

JSON文字列がjqGridから来ています。文字列を変更せずにC#に送信します。文字列の形式は正しいはずです。フィルタフィールドの間違いは何ですか?フィルターフィールドは私が得ることができる(私がメイントピックで述べたように)得ることができる。実際に私は "ルール"フィールドを取得することができません。 –

関連する問題