Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查json数组是否存在#_C#_Json.net - Fatal编程技术网

C# 检查json数组是否存在#

C# 检查json数组是否存在#,c#,json.net,C#,Json.net,我有一个json对象,如下所示: { "Name": "Mike", "Personaldetails": [ { "Age": 25, "Surname": "Barnes" } ], "Address": [ null ] } 现在我已经编写了C#来访问这段代码,并在“Personal Details”数组和“Address”数组中迭代每个对象 如何编写检

我有一个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
         }
    }
}
您缺少用于检查比较的双精度“==”是一个赋值操作

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";
}

没错,似乎没有其他人注意到,答案如下

问题在于这段代码:

"Address": [
    null
]
您正在尝试检查
地址
是否为空,但是此JSON不表示
地址
。它显示一个有效数组,其中有一个
null
对象。如果这是正确的,那么您可能希望尝试以下方法:

if(jsonObject.Address == null || (jsonObject.Address[0] == null))
{
    return "null array";
}
首先,注意使用
=
检查相等性(而不是
=
进行赋值)


其次,这将检查
地址
是否为null,或者数组的第一个对象是否为
null
,我假设这就是您正在尝试执行的操作。可能还需要添加一个长度检查,以查看数组是否只是一个空元素,但这取决于您的要求

您需要在if语句中使用==而不是=进行比较您发布的不是有效的JSON(特别是
Personaldetails
属性的值).现在高兴了吗@Jonesy和@Andrew?我们想帮忙,别紧张。此外,您的代码也没有反映这些更新的更改。不过,这仍然不会为我运行。我得到一个运行时错误,
Newtonsoft.Json.Linq.JObject
不包含个人详细信息的定义。你在使用JSON.NET吗?是的,但问题是数组不是空的。它是一个包含单个空值的数组。如果您的JSON无效,请使用或验证您的JSON。这是您创建的JSON还是正在传递给您的JSON?不,我没有将它传递给我@musefan,我很快创建了它,但忘记了对JSON数组中的项目使用
{}
。所以请大家注意,这只是一个简单的错误,我已经纠正并验证了。如果您查看我的问题编辑时间,您将看到我已经纠正了json示例。
.count()
??a) 以小写字母b)Linq开头,带dynamic?哇@musefan你真是太棒了,重申了之前发布的答案。@RobCarroll:错了,你的答案没有提到在我开始写答案时检查数组中的第一项。当我开始写作时,您的回答只是对
=
=
解决方案进行了评论,这只是问题的一部分problem@RobCarroll首先,运算符应该是
|
而不是
&&
。其次,您的
Count()
将引发异常。我猜你没有检查就把它贴了。。。。