2014-10-09 339 views
2

對不起人。我很新的編寫代碼...如何判斷JSON結果是否有對象或數組?

我正在編寫一個powershell cmdlet在C#中,它伸出到API並獲取JSON作爲響應。

取決於呼叫我做出一個API,JSON數組或返回

Sometiems單個JSON對象,也可以是

{"result": [ 
{ 
"id": "24095", 
"hostid": "24094", 
"name": "host1.fqdn.com", 
"clustered": "false", 
"type": "VM", 
"ipaddress" : "192.168.1.184" 
}, 
{ 
"id": "24097", 
"hostid": "24096", 
"name": "host2.fqdn.com", 
"clustered": "true", 
"type": "VM", 
"ipaddress" : "192.168.1.185" 
} 
] 
} 

,有時也可以是

{"result": { 
"id": "24095", 
"hostid": "24094", 
"name": "host1.fqdn.com", 
"clustered": "false", 
"type": "VM", 
"ipaddress" : "192.168.1.184" 
} 
} 

我想弄清楚如何使用JSON.NET,我可以找出如果返回的json有一個「結果」或「結果」數組的對象。

根據檢查,我想打電話打印出

我希望能寫會打印出所有的鍵作爲一個通用的方法CSV格式的對象或數組的方法CSV標題以及CSV的值作爲行的值。

但我在與被搞清楚我的JSON對象是否數組或只是一個對象

我試着在

無法

JObject jsonres = JObject.Parse(strResponse); 
JObject appobj = (JObject)jsonres.SelectToken("result"); 

Console.WriteLine(appobj.Type.ToString()); 

結果麻煩的第一件事投入'Newtonsoft.Json.Linq.JArray'類型的對象來鍵入 'Newtonsoft.Json.Linq.JObject'。

當appobj [「result」]是一個數組並且工作得很好,並且當appobj [「result」]是單個對象時打印「Object」。

回答

5

不知道這是否最佳的方法來處理它,但你可以使用這樣的事情:

if (jsonres.SelectToken("result") is JObject) 
{ ... } 
else if (jsonres.SelectToken("result") is JArray) 
{ ... } 
else 
{ ...some exception perhaps } 

編輯:輕微的即興

if (jsonres.SelectToken("result") is JObject) 
{ //Create JArray with the lone "result" in it } 

//Use the JArray 
+0

哦!甜!這使它變得更容易!非常感謝@bit。 – anoopb 2014-10-09 03:58:32

3

這將工作:

JObject jsonres = JObject.Parse(json); 
    Console.WriteLine(jsonres["result"].Type); 

找出它是對象還是數組。你可以在enum上使用開關箱:

  switch(jsonres["result"].Type) 
      { 
       case JTokenType.Object: 
       //Do something if it's an object 
        break; 
       case JTokenType.Array: 
       //Do something if it's an array 
        break; 
      } 
+1

謝謝。這也是一個很好的選擇! – anoopb 2014-10-09 04:32:21

相關問題