Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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#_Asp.net_Json_Asp.net Mvc_Geocode - Fatal编程技术网

C# 从特定位置的JSON格式中取出记录

C# 从特定位置的JSON格式中取出记录,c#,asp.net,json,asp.net-mvc,geocode,C#,Asp.net,Json,Asp.net Mvc,Geocode,我使用谷歌的地理编码API根据我传递的邮政编码获取数据,如下所示: http://maps.googleapis.com/maps/api/geocode/json?address=97001&sensor=true '0' ... 'long_name' => "Oregon" 'short_name' => "OR" 'types' ... '0' => "administrative_area_level_1" '1' => "

我使用谷歌的地理编码API根据我传递的邮政编码获取数据,如下所示:

http://maps.googleapis.com/maps/api/geocode/json?address=97001&sensor=true
'0' ...
  'long_name' => "Oregon"
  'short_name' => "OR"
  'types' ...
    '0' => "administrative_area_level_1"
    '1' => "political"
我得到的结果如下:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "97001",
               "short_name" : "97001",
               "types" : [ "postal_code" ]
            },
            {
               "long_name" : "Antelope",
               "short_name" : "Antelope",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Oregon",
               "short_name" : "OR",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Antelope, OR 97001, USA",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 45.0835979,
                  "lng" : -120.476616
               },
               "southwest" : {
                  "lat" : 44.801399,
                  "lng" : -120.91835
               }
            },
            "location" : {
               "lat" : 44.9552895,
               "lng" : -120.6265837
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 45.0835979,
                  "lng" : -120.476616
               },
               "southwest" : {
                  "lat" : 44.801399,
                  "lng" : -120.91835
               }
            }
         },
         "place_id" : "ChIJhZMDGc0ovFQRBev1yy22nAk",
         "types" : [ "postal_code" ]
      }
   ],
   "status" : "OK"
}
现在这很好,但我只想从“addres_component”中选择记录,其中类型等于:

"types" : [ "administrative_area_level_1", "political" ]
我可以这样做来获取值:

JObject.Parse(myJson)["keyhere"].ToString();
但是,我如何实际检查short_name和long_name值的类型是否是我上面输入的类型


如何使用JObject类实现这一点?

Newtonsoft JSON中有一个名为
SelectToken
的方法,允许您使用JSONPath(类似于XPath)查找JSON的特定部分

您可以在此处阅读更多内容:

对于您的具体情况,您可以这样做:

JObject o = JObject.Parse(json); 
JToken token = o.SelectToken("$..address_components[?(@.types.indexOf('administrative_area_level_1') != -1), ?(.types.indexOf('political') != -1)]");
这是没有测试过的,你可能不得不自己摆弄它。文档可在Newtonsoft JSON的链接中找到

上述JSONPath的评估结果如下:

http://maps.googleapis.com/maps/api/geocode/json?address=97001&sensor=true
'0' ...
  'long_name' => "Oregon"
  'short_name' => "OR"
  'types' ...
    '0' => "administrative_area_level_1"
    '1' => "political"
一些注意事项:

在JSONPath中的
?()
测试中,您可以使用JavaScript。详情如下:

联合字符
的作用类似于OR。JSONPath中还没有逻辑运算符。请在此处阅读更多信息:

为了测试JSONPath,可以使用在线测试仪。我曾经