如何判断JSON结果是否有对象或数组?

ano*_*opb 2 c# linq json

对不起,伙计们.我很擅长编写代码......

我正在c#中编写一个powershell cmdlet,它会扩展到API并获取JSON作为响应.

根据我对API的调用,返回JSON数组或单个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"
}
]
}
Run Code Online (Sandbox Code Playgroud)

有时它可以

{"result": {
"id": "24095",
"hostid": "24094",
"name": "host1.fqdn.com",
"clustered": "false",
"type": "VM",
"ipaddress" : "192.168.1.184"
}
}
Run Code Online (Sandbox Code Playgroud)

我正在试图弄清楚如何使用JSON.NET,我可以弄清楚返回的json是否有"result"对象或"result"数组.

根据检查,我想调用一种以CSV格式打印出对象或数组的方法

我希望编写一个通用方法,将所有键打印为CSV标头,将值打印为CSV行.

但我遇到的第一件事就是弄清楚我的JSON对象是有一个数组还是只有一个对象

我试过了

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

Console.WriteLine(appobj.Type.ToString());
Run Code Online (Sandbox Code Playgroud)

结果是

无法将类型为"Newtonsoft.Json.Linq.JArray"的对象强制转换为"Newtonsoft.Json.Linq.JObject".

当appobj ["result"]是一个数组并且工作得很好并且当appobj ["result"]是单个对象时打印"Object".

bit*_*bit 6

不确定这是否是处理它的最佳方式,但你可以使用这样的东西:

if ( jsonres.SelectToken("result") is JObject )
{ ... }
else if ( jsonres.SelectToken("result") is JArray)
{ ... }
else
{ ...some exception perhaps }
Run Code Online (Sandbox Code Playgroud)

编辑:轻微的即兴创作

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

//Use the JArray 
Run Code Online (Sandbox Code Playgroud)