检查C#中是否存在JSON数组

4

我有一个 JSON 对象,如下所示:

{
    "Name": "Mike",
    "Personaldetails": [
        {
            "Age": 25,
            "Surname": "Barnes"
        }
    ],
    "Address": [
        null
    ]
}

现在我已经编写了C#代码来访问此代码并迭代每个对象在“个人详细信息”数组和“地址”数组中。

如何编写检查以查看数组是否为空?

dynamic jsonObject = JsonConvert.DeserializeObject(data);

foreach (var obj in jsonObject.Personaldetails)
{
     if (obj.Age = 24)
     {
          //do stuff
     }
}

//This is where I am stuck
if(jsonObject.Address = null)
{
    return "null array";
}
//If another json stream was not null at "Address" array
else
{
    foreach (var obj in jsonObject.Address)
    {
         if (obj.arrayItem == "Something")
         {
              //do stuff
         }
    }
}

1
在if语句中进行比较时,需要使用==而不是=。 - Jonesopolis
1
你所发布的不是有效的JSON(特别是“Personaldetails”属性的值)。 - Andrew Whitaker
现在 @Jonesy 和 @Andrew 都高兴了吗? - Mike Barnes
我们正在尽力帮助,放轻松。另外,你的代码没有反映这些更改。 - Jonesopolis
谢谢更新,但是这对我仍然无法运行。我收到一个运行时错误,指出Newtonsoft.Json.Linq.JObject没有包含名为“Personaldetails”的定义。您是否在使用JSON.NET? - Andrew Whitaker
确实,我正在使用JSON.NET。 - Mike Barnes
2个回答

7

正如没有其他人似乎在关注一样,这里是答案...

问题在于这段代码:

"Address": [
    null
]

您正在尝试检查 Address 是否为空,但是此 JSON 并不表示一个空的 Address。它显示了一个有效的数组,只有一个单独的 null 对象。如果这是正确的,则您可以尝试以下方法:
if(jsonObject.Address == null || (jsonObject.Address[0] == null))
{
    return "null array";
}

首先请注意使用 == 来检查相等性(而不是用于赋值的 =)。
其次,这将检查 Address 是否为 null 或者数组的第一个对象是否为 null,我猜想这就是你想要做的。如果数组只是一个单一的 null 元素,那么添加一个长度检查也许是值得的 - 但这取决于你的要求。

哇,@musefan,你真的很擅长重申之前发布的答案。 - Rob Carroll
@RobCarroll:错了,你的回答在我开始写我的答案时没有提到检查数组中的第一个项。当我开始写作时,你的回答只对= > ==解决方案做出了评论,这只是问题的一部分。 - musefan
2
@RobCarroll 首先,运算符应该是||而不是&&。其次,你的Count()会抛出异常。我猜你是没有检查就发布了它... - I4V

1
您漏了双重“==”来进行比较,而“=”是赋值操作。
if(jsonObject.Address == null)
{
    return "null array";
}

你的JSON应该像这样。否则你并不是在检查一个空数组,而是检查一个数组中第一个元素为空值的情况。
{
    "Name": "Mike",
    "Personaldetails": [
        {
            "Age": 25,
            "Surname": "Barnes"
        }
    ],
    "Address":  null
}

然后代码将如下所示:
if(jsonObject.Address == null)
{
    return "null array";
}

如果您需要保留原始JSON,可以进行以下检查:
if(jsonObject.Address.Length > 0 && jsonObject.Address[0] == null)
{
    return "null array";
}

是的,但问题在于数组不是空的。它是一个包含单个空值的数组。 - musefan
你的JSON格式不正确,可以使用http://jsonviewer.stack.hu/或http://www.jsonmate.com来验证。这个JSON是你创建的还是传递给你的? - Rob Carroll
不,我没有收到@musefan的信息,我很快就创建了它,但忘记在Json数组中使用{}。所以,请大家放心,这只是一个简单的错误,我已经纠正并验证过了。 - Mike Barnes
如果您查看我的问题编辑时间,您会发现我已经更正了JSON示例。 - Mike Barnes
.count() ?? a) 以小写字母开头 b) Linq 与 dynamic - I4V

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接