c# - 如何判断 JSON 结果是对象还是数组?

标签 c# json linq

对不起各位。我对编写代码还很陌生......

我正在用 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"
}
]
}

有时可以

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

我正在尝试弄清楚如何使用 JSON.NET,我可以弄清楚返回的 json 是否具有“结果”对象或“结果”数组。

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

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

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

我试过了

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

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

结果

Unable to cast object of type 'Newtonsoft.Json.Linq.JArray' to type '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 }

编辑:轻微的即兴创作

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

//Use the JArray 

关于c# - 如何判断 JSON 结果是对象还是数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26269964/

相关文章:

java - 没有换行字符的 JSON Java

c# - Entity Framework 6 中的所有查询是否都已编译?

c# - 在 Linq select 子句中重用表达式(查询格式)

c# - 如何使用clearcanvas访问DICOM序列的所有内容

c# - 如何在 Oracle 的连接字符串中设置初始目录?

json - 将二进制数据 blob 发送到 dynamodb 时出错

java - 在Java中解析JSON字符串,为什么说 "No value for ..."

linq - 使用 LINQ 读取 Excel

c# - 在 Team Foundation Server 2010 任务中指定天数而不是小时数

c# - 无法加载类型 'System.IdentityModel.Tokens.JwtSecurityToken'