2009-11-08 10 views
24

現在、私のコードの構造はXmlDocumentを使用してXmlデータをロードし、次にSelectNodesを使用して繰り返し項目のリストを反復処理します。XMLのXPath、SelectNodes、SelectSingleNodeのJSON.NETに相当するものは何ですか?

各要素について、XmlNode.SelectSingleNodeを使用してフィールド要素を選択しています。

JSON.NETを使用して、JSONとして私に届いたドキュメントで同じ結果を得たいと考えています。答えは、JSON.net以外のものでもかまいません。

答えて

34

Json.NETにはSelectTokenがあります。これは、文字列式を経由してJSONを取得するためにDataBinder.Evalに似た構文を使用します。

JObject o = JObject.Parse("{'People':[{'Name':'Jeff'},{'Name':'Joe'}]}"); 

// get name token of first person and convert to a string 
string name = (string)o.SelectToken("People[0].Name"); 

それとも、複数の値を選択したい場合:

JObject o = JObject.Parse("{'People':[{'Name':'Jeff','Roles':['Manager', 'Admin']}]}"); 

// get role array token of first person and convert to a list of strings 
IList<string> names = (string)o.SelectToken("People[0].Roles").Select(t => (string)t).ToList(); 

ドキュメント:応答のためのQuerying JSON with SelectToken

+0

ニース!大文字と小文字を区別しない方法でこれを行う方法はありますか? 'JToken.GetValue(" something "、StringComparison.OrdinalIgnoreCase)のように'? –

1

JSONをマップできるオブジェクト階層はありますか?オブジェクトツリーを作成(つまりJSONを逆シリアル化)し、LINQのWhere,SelectManyなどを使用できます。

+0

感謝マーク具体的には、twitter.com/status/mentions.jsonフィードを使用しています。私は各フィールドを使用している(ビルド時には)、SelectSingleNodeのJsonバージョンでフィールドをプルできるようにすることなく、各 "ステータス"をHTMLレンダリングに渡したいと思います。 LINQの例が大いに役立つでしょう:) –

+0

ああ、そうです。それが意味するものなら、あなたは任意の文字列を使用することはできません。シナリオごとにコーディングする必要があります。 –

関連する問題