Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.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# - Fatal编程技术网

C# 解析JSON结果并检查指定字符串的状态

C# 解析JSON结果并检查指定字符串的状态,c#,C#,读取此类JSON文件最有效的方法是什么。老实说,我需要从JSON中得到的是距离。在“元素”节点中,可以有一个或多个包含距离和持续时间的项。我需要对每个元素节点的所有值求和:距离文本。例如:窑中324公里的距离。我在下面展示了3个例子。我该怎么做 在上一个例子中,若请求是坏的,那个么除了OK之外,可能还有类似NOT_FOUND或者其他的东西。若在任何状态下都会有一些不同于在东方OK的东西,我会得到抛出异常 JSON响应示例1: 在这种情况下,我应该计算为:324 JSON响应示例2:这里可能有更多

读取此类JSON文件最有效的方法是什么。老实说,我需要从JSON中得到的是距离。在“元素”节点中,可以有一个或多个包含距离和持续时间的项。我需要对每个元素节点的所有值求和:距离文本。例如:窑中324公里的距离。我在下面展示了3个例子。我该怎么做

在上一个例子中,若请求是坏的,那个么除了OK之外,可能还有类似NOT_FOUND或者其他的东西。若在任何状态下都会有一些不同于在东方OK的东西,我会得到抛出异常

JSON响应示例1:

在这种情况下,我应该计算为:324

JSON响应示例2:这里可能有更多类似的元素

在这种情况下,我应该计算为:516

JSON响应示例3:某些状态与OK不同

在这种情况下,我应该得到一个异常

,您可以使用它根据json结构生成C类

然后安装nuget包

然后,您可以尝试以下代码:

var sampleJson = @"{


""destination_addresses"" : [ ""Długa 50, 05-075 Warszawa, Slovakia"" ],
   ""origin_addresses"" : [ ""Wilenska 2, Zabrze, Slovakia"" ],
   ""rows"" : [
      {
         ""elements"" : [
            {
               ""distance"" : {
                  ""text"" : ""324 km"",
                  ""value"" : 323619
               },
               ""duration"" : {
                  ""text"" : ""3 hours 16 mins"",
                  ""value"" : 11776
               },
               ""status"" : ""OK""
            },
            {
               ""distance"" : {
                  ""text"" : ""192 km"",
                  ""value"" : 191950
               },
               ""duration"" : {
                  ""text"" : ""2 hours 26 mins"",
                  ""value"" : 8732
               },
               ""status"" : ""OK""
            },
         ]
      }
   ],
   ""status"" : ""OK""
}";

    var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<Root>(sampleJson);
    if (obj.status != "OK")
    {
        throw new Exception($"Status is: {obj.status}");
    }

    if (obj.rows.Any(r => r.elements.Any(e => e.status != "OK")))
    {
        throw new Exception("some of the elements status is not ok");
    }

    var allDistanceText = obj.rows?.Select(e => e.elements).SelectMany(e => e.Select(d => d.distance?.text));
    int sum = allDistanceText.Select(dt => dt?.Replace("km", "")?.Trim())
        .Sum(dt =>
        {
            if (int.TryParse(dt, out int results))
            {
                return results;
            }
            return 0;
        });
    sum.Dump();

问:我很好奇:为什么是斯洛伐克,而不是波兰?回答您的问题:您不想检查字符串。您希望向项目中添加Json.Net NuGet包,并调用JsonConvert.Deserialize:@paulsm4我有一些生成器用于其他用途,但该主题不是这样。请使用NewtonSoft库。您可以调用JsonConvert.DeserializeObject。它将创建一个JSON对象,您可以通过foreach循环该对象。然后,如果状态正常,只需将从该对象到新变量的每个距离相加,否则将引发异常。@ThomasH您能发布答案吗?大学教师;我不知道如何获取那些仍在尝试的值。我在var obj=Newtonsoft.Json.JsonConvert.DeserializeObjectjsonstring上获取null;我提供了我的示例。您正在尝试哪个json示例?一切都很好,谢谢。
{
   "destination_addresses" : [ "Długa 50, 05-075 Warszawa, Slovakia" ],
   "origin_addresses" : [ "Wilenska 2, Zabrze, Slovakia" ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "324 km",
                  "value" : 323619
               },
               "duration" : {
                  "text" : "3 hours 16 mins",
                  "value" : 11776
               },
               "status" : "OK"
            },
            {
               "distance" : {
                  "text" : "192 km",
                  "value" : 191950
               },
               "duration" : {
                  "text" : "2 hours 26 mins",
                  "value" : 8732
               },
               "status" : "OK"
            },
         ]
      }
   ],
   "status" : "OK"
}
{
   "destination_addresses" : [ "", "", "" ],
   "origin_addresses" : [ "" ],
   "rows" : [
      {
         "elements" : [
            {
               "status" : "NOT_FOUND"
            },
            {
               "status" : "OK"
            },
            {
               "status" : "NOT_FOUND"
            }
         ]
      }
   ],
   "status" : "ERR" 
}
var sampleJson = @"{


""destination_addresses"" : [ ""Długa 50, 05-075 Warszawa, Slovakia"" ],
   ""origin_addresses"" : [ ""Wilenska 2, Zabrze, Slovakia"" ],
   ""rows"" : [
      {
         ""elements"" : [
            {
               ""distance"" : {
                  ""text"" : ""324 km"",
                  ""value"" : 323619
               },
               ""duration"" : {
                  ""text"" : ""3 hours 16 mins"",
                  ""value"" : 11776
               },
               ""status"" : ""OK""
            },
            {
               ""distance"" : {
                  ""text"" : ""192 km"",
                  ""value"" : 191950
               },
               ""duration"" : {
                  ""text"" : ""2 hours 26 mins"",
                  ""value"" : 8732
               },
               ""status"" : ""OK""
            },
         ]
      }
   ],
   ""status"" : ""OK""
}";

    var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<Root>(sampleJson);
    if (obj.status != "OK")
    {
        throw new Exception($"Status is: {obj.status}");
    }

    if (obj.rows.Any(r => r.elements.Any(e => e.status != "OK")))
    {
        throw new Exception("some of the elements status is not ok");
    }

    var allDistanceText = obj.rows?.Select(e => e.elements).SelectMany(e => e.Select(d => d.distance?.text));
    int sum = allDistanceText.Select(dt => dt?.Replace("km", "")?.Trim())
        .Sum(dt =>
        {
            if (int.TryParse(dt, out int results))
            {
                return results;
            }
            return 0;
        });
    sum.Dump();