2017-09-28 127 views
-2

我的問題很明確。我想在這個json數組中獲得指定的項目(只有名稱'name'的值);c#獲取指定名稱的數組的所有子節點

https://i.hizliresim.com/o6Z0Wb.png <示例('result'部分應該在前一個圓圈中。

{"success":true,"message":"","result":[ 
{"name":"VALUE_I_WANT_TO_GET1","Created":"2017-06-06T01:22:35.727"}, 
{"name":"VALUE_I_WANT_TO_GET2","Created":"2017-06-06T01:22:35.727"}, 
{"name":"VALUE_I_WANT_TO_GET3","Created":"2017-06-06T01:22:35.727"}, 
{"name":"VALUE_I_WANT_TO_GET4","Created":"2017-06-06T01:22:35.727"} 
]} 

正如你可以看到... ...這是一個清晰的問題。我的代碼是(我認爲它應該是這樣的);

 var json = wc.DownloadString("website/url"); 
     JObject data = JObject.Parse(json); 
     var test = (string)data["result"][/*I want to get all values with name 'name'*/]["name"]; 

我用這個代碼做了它,你可以用它:)

 JObject data = JObject.Parse(json); 

     for (int i = 0; i <= data["result"].Count()-1; i++) 
     { 
      var test = (string)data["result"][i]["name"]; 
      listBox1.Items.Add(test); 
     } 
+1

請顯示示例json .. –

+0

我編輯的問題 – Radagast

+0

什麼類型的'json_array'和您使用哪個框架進行反序列化? –

回答

0

下面是一些代碼:結果

void Main() 
{ 
    // create array 
    DataFromJSON[] data = new UserQuery.DataFromJSON[3]; 
    data[0] = new DataFromJSON() { Data = "val0", Created = DateTime.Now }; 
    data[1] = new DataFromJSON() { Data = "val1", Created = DateTime.Now }; 
    data[2] = new DataFromJSON() { Data = "val2", Created = DateTime.Now }; 

    var values = from x in data 
       select x.Data; 

    values.Dump(); 

} 

// Define other methods and classes here 
public class DataFromJSON 
{ 
    public string Data { get; set; } 
    public DateTime Created { get; set;} 
} 

這裏#SA的圖片,使用LinqPad 。行values.Dump()調用由LinqPad定義的擴展方法,將其附加到的對象輸出到代碼窗口下的「結果」窗口。

LinqPad5 resuts

+0

對不起,但我的代碼是; var json = wc.DownloadString(「https:// site/JSON_DATA」); JObject data = JObject.Parse(json); var test =(string)data [「result」] [0-226] [「NAME_TO_GET_VALUE」] textBox7.Text = test; – Radagast

0

首先你要反序列化的JSON轉換成你喜歡的類型:

MyType results = JsonConvert.DeserializeObject<MyType>(json_array); 

其中MyType是這樣的:

class MyType 
{ 
    public bool success { get; set; } 
    public string message { get; set; } 
    public List<AnotherType> results { get; set; } 
} 

class AnotherType 
{ 
    public string data { get; set; } 
    public DateTime Created { get; set; } 
} 

現在從它那裏得到的第一個227元並選擇其data

var data = myInstance.results.Take(227).Select(x => x.data); 
+0

不,我想要227個孩子以一個特定的名字:deserialized_Json [「results」] [0-227] [「SPECİFİED_NAME_FOR_GET_VALUES」]; – Radagast

0

有一個巧妙的方法Visual Studio可以爲你做。首先,複製您期望查詢的json樣本,打開一個新的C#文件,然後選擇Edit - >Paste Special - >Paste JSON as classes
BOOM!這裏是你需要的類,你應該給他們有意義的名字。

接下來,你可以desiralize JSON的,像這樣:

var myInstance = JsonConvert.DeserializeJson<MyClass>(jsonString); 

這會給你的根對象的實例,以保存在裏面的陣列中的數據。

編輯:

要選擇的值,你可以做這樣的事情(你在該行反序列化上面的數據後):

myInstance.Array.Select(x => x.name).ToList(); 

這將使僅包含字符串列表所有你的名字的屬性。

+0

請看看添加到問題的圖片。 – Radagast

+0

@Radagast - 有些東西對我來說不太清楚,是同一類型數據中的所有實例嗎?或者數組包含多種類型?也就是說,你是在尋找屬性'name'的所有值,還是從數組中的所有實例中尋找那些*包含*屬性'name'(而另一個不包含這樣的屬性) 。 – CKII

+0

請閱讀此答案請:https://stackoverflow.com/questions/46468642/c-sharp-get-all-childs-of-a-array-with-specified-name/46469888#46469888 – Radagast

相關問題