4

我有一个像这样的json对象:

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

现在我已经编写了 C# 来访问此代码并遍历数组中的每个对象"Personal Details"并进入"Address"数组。

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

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
         }
    }
}
4

2 回答 2

7

就在其他人似乎没有注意的时候,这就是答案……

问题在于这段代码:

"Address": [
    null
]

您正在尝试检查是否Address为空,但是此 JSON 不代表null Address. 它显示了一个有效的数组,只有一个null对象。如果这是正确的,那么你可能想试试这个:

if(jsonObject.Address == null || (jsonObject.Address[0] == null))
{
    return "null array";
}

首先,注意使用==来检查相等性(而不是=赋值)。

其次,这将检查是否Address为 null 或数组的第一个对象是否为null,我认为这是您想要做的。还可能值得添加长度检查以查看数组是否只是一个空元素 - 但这取决于您的要求

于 2013-08-15T14:09:30.180 回答
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";
}
于 2013-08-15T13:55:32.500 回答