2016-06-02 3 views
3

지오 코딩을 위해 Google지도 api에서 json을 구문 분석하려고합니다.C# JSON 응답에서 HttpClient를 사용하여 특정 객체 가져 오기

json으로는 다음과 같습니다

{ 
"results" : [ 
    { 
    "address_components" : [ 
     { 
      "long_name" : "1600", 
      "short_name" : "1600", 
      "types" : [ "street_number" ] 
     }, 
     { 
      "long_name" : "Amphitheatre Parkway", 
      "short_name" : "Amphitheatre Pkwy", 
      "types" : [ "route" ] 
     }, 
     { 
      "long_name" : "Mountain View", 
      "short_name" : "Mountain View", 
      "types" : [ "locality", "political" ] 
     }, 
     { 
      "long_name" : "Santa Clara County", 
      "short_name" : "Santa Clara County", 
      "types" : [ "administrative_area_level_2", "political" ] 
     }, 
     { 
      "long_name" : "California", 
      "short_name" : "CA", 
      "types" : [ "administrative_area_level_1", "political" ] 
     }, 
     { 
      "long_name" : "United States", 
      "short_name" : "US", 
      "types" : [ "country", "political" ] 
     }, 
     { 
      "long_name" : "94043", 
      "short_name" : "94043", 
      "types" : [ "postal_code" ] 
     } 
    ], 
    "formatted_address" : "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA", 
    "geometry" : { 
     "location" : { 
      "lat" : 37.4224277, 
      "lng" : -122.0843288 
     }, 
     "location_type" : "ROOFTOP", 
     "viewport" : { 
      "northeast" : { 
       "lat" : 37.4237766802915, 
       "lng" : -122.0829798197085 
      }, 
      "southwest" : { 
       "lat" : 37.4210787197085, 
       "lng" : -122.0856777802915 
      } 
     } 
    }, 
    "place_id" : "ChIJ2eUgeAK6j4ARbn5u_wAGqWA", 
    "types" : [ "street_address" ] 
    } 
], 
"status" : "OK" 
} 

내가 위도와 경도로 location 객체에만 관심과 HttpContent로 그들을 검색하는 C#을 내 JSON 개체 트리를 탐색하는 방법을 알고 싶습니다 HttpClient에서 GetAsync의 응답. 다음 코드 단편은 내 요청이 어떻게 이루어지는 지 보여줍니다.

public async Task<Coordinates> GeoCode(string address) 
{ 
     HttpClient client= new HttpClient(); 
     var baseUrl = "http://maps.google.com/maps/api/geocode/json?address="; 
     var addressEncoded = WebUtility.UrlEncode(address); 
     var response= await client.GetAsync(baseUrl + addressEncoded); 

     if(response.IsSuccessStatusCode) 
     { 
      //read location ... 
     } 
} 

어떻게 위치 개체를 읽을 수 있습니까?

답변

2

입니다.

var json = File.ReadAllText("D:/json.txt"); 
var results = JObject.Parse(json).SelectToken("results") as JArray; 

foreach (var result in results) 
{ 
    var geometryEntry = result.SelectToken("geometry.location"); 
    var longitude = geometryEntry.Value<double>("lat"); 
    var latitude = geometryEntry.Value<double>("lng"); 

    Console.WriteLine("{0}, {1}", longitude, latitude); 
} 

출력 :

enter image description here

+0

정말 고마워요! – NicolasL

2

하나의 옵션은 JSON을 유형화 된 클래스로 deserialize하고 기타는 동적 유형을 사용하는 것입니다.

Using JSON.NET for dynamic JSON parsing

JSON 문자열

동적으로하는 jobject 클래스 캐스트로 파싱 세 가지 특성을 갖는 객체를 나타낸다. 일단 동적으로 형변환하면 익숙한 객체 구문을 사용하여 객체에 액세스 할 수 있습니다. 나는 보통 그것을 할 방법은 다음과

public void JValueParsingTest() 
{ 
    var jsonString = @"{""Name"":""Rick"",""Company"":""West Wind"", 
         ""Entered"":""2012-03-16T00:03:33.245-10:00""}"; 

    dynamic json = JValue.Parse(jsonString); 

    // values require casting 
    string name = json.Name; 
    string company = json.Company; 
    DateTime entered = json.Entered; 

    Assert.AreEqual(name, "Rick"); 
    Assert.AreEqual(company, "West Wind");    
} 
+0

덕분에, 동적 솔루션은 흥미로운 보이는 응답에서 동적으로 분석하는 방법을 어떤 생각 : (/json.txt 나는 D에 당신의 JSON 객체를 저장). 내용? – NicolasL

+0

Response.Content.ReadAsStringAsync()를 사용하여 json을 System.String으로 가져 와서 Parse 메서드에 전달하십시오. –

관련 문제