2012-04-02 16 views
10

jsonレスポンスからいくつかの値を選択する必要があります。私はjson.netを使っていますが、もっと簡単なものでいいですが、過去のことについては多くのドキュメント/チュートリアルがあるようです。JSON.NET linqで配列内の項目を選択

var stuff = response["teacherHolder"].Children()["students"]; 

var names = from y in stuff.Children().Values() 
        select y["name"]; 

と、この:

var names= response["teacherHolder"] 
      .Select(s => (string)s.SelectToken("students[0].name")).ToList(); 

が、私はこれと他のバリエーションを試してみました

{ 
"teacherHolder": [{ 
    "id": 200000001, 
    "name": "Mr Test", 
    "class": "a4", 
    "students": [{ 
     "id": "100532469", 
     "name": "ben" 
    }, 
    { 
     "id": "100506025", 
     "name": "bill" 
    }, 
    { 
     "id": "100000447", 
     "name": "bob" 
    }] 

}] 

}:JSONの例では、私はすべての年齢層を選択する必要があります下にレスポンスは、WebリクエストからのJObjectです。 私はちょうどこれを取り戻す:結果は、最終的に辞書に入れている

[{"Key":"Newtonsoft.Json.Linq.JEnumerable`1[Newtonsoft.Json.Linq.JToken]","Value":"Newtonsoft.Json.Linq.JEnumerable`1[Newtonsoft.Json.Linq.JToken]"}] 

どうすればいいですか?私はそれが簡単になることを知って、私はちょうど正しい組み合わせを発見havent。

答えて

20

あなたがすべての教師のすべての生徒の名前を取得したい場合、あなたはこのように例のためにそれを行うことができます:あなたがしたい場合

var names = from teacher in response["teacherHolder"] 
      from student in teacher["students"] 
      select student["name"]; 

:別のオプションとして

var students = response["teacherHolder"].Children()["students"]; 

var names = students.Children()["name"]; 

あるいは、それらはIEnumerable<string>として、selectの末尾にValue<string>()を追加するだけです。または、最初のオプションを使用している場合は、Values<string>()を追加します。

通常、オブジェクトモデルの型を作成して、特殊なJSONオブジェクトではなく通常のオブジェクトと同じように操作できます。

あなたが何か行うことができ、ことをお持ちの場合:最初のメソッドを使用して

var names = from teacher in response.TeacherHolder 
      from student in teacher.Students 
      select student.Name; 
+0

こんにちはsvickイムを - しかし、私は戻って取得しています:{Newtonsoft.Json.Linq.JEnumerable }はnames変数にありますか? – gdp

+1

はい、そのため、 'string'のコレクションが必要な場合は、' Values () 'を追加する必要があります。 – svick

+1

こんにちはsvick私は最後に値()を追加しました。今すぐ: var names = students.Children()["name"]。値(); – gdp

関連する問題