对不起,伙计们.我很擅长编写代码......
我正在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".
不确定这是否是处理它的最佳方式,但你可以使用这样的东西:
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)