【GAS】초보자용 JSON 형식의 읽는 방법

개요



JSON은 형식의 데이터 기술을 다루는 일이 있지만, JSON이 무엇인지 잘 모르는, 굉장한 문자의 열로 보기 어려운, 게다가 GAS로 읽을 때의 쓰는 방법이 의미 모르겠다!

JSON을 처음부터 이해하는 것은 프로에게 맡기고, 아마추어 리먼은 우선 GAS에서 JSON 형식의 기술로부터 필요한 정보만 얻을 수 있으면 좋겠다고 생각했습니다.

엔지니어를 목표로 하는 것이 아니라 어쩐지 편리하게 사용하고 싶은 사람을 위한 기사^^)b

JSON 형식의 설명 예



개인적으로, GoogleMap을 geocode한 결과로서 JSON에 부딪히는 일이 많기 때문에, 그쪽을 예로 해설. 「스카이 트리」를 geocode했을 때에 얻을 수 있는 JSON 형식의 기술이 다음과 같다.
{status=OK, results=[{types=[establishment, point_of_interest, tourist_attraction],
 place_id=ChIJ35ov0dCOGGARKvdDH7NPHX0, plus_code={compound_code=PR66+27 日本、東京都
墨田区, global_code=8Q7XPR66+27}, formatted_address=日本、〒131-8634 東京都墨田区押上
1丁目1−2, geometry={viewport={northeast={lat=35.7114116802915, 
lng=139.8120493802915}, southwest={lat=35.7087137197085, lng=139.8093514197085}}, 
location_type=ROOFTOP, location={lng=139.8107004, lat=35.7100627}}, 
address_components=[{types=[premise], short_name=2, long_name=2}, {long_name=1, 
types=[political, sublocality, sublocality_level_4], short_name=1}, {types=
[political, sublocality, sublocality_level_3], long_name=1丁目, short_name=1丁目}, 
{short_name=押上, types=[political, sublocality, sublocality_level_2], long_name=押
上}, {long_name=墨田区, types=[locality, political], short_name=墨田区}, {short_name=
東京都, types=[administrative_area_level_1, political], long_name=東京都}, {types=
[country, political], short_name=JP, long_name=日本}, {types=[postal_code], 
long_name=131-8634, short_name=131-8634}]}]}

벌써 싫어・・・.

기본 사고 방식



예를 들어, 이 중에서 위도(lat)를 읽고 싶을 때, GAS에서는 다음과 같이 쓴다.
['results'][0]['geometry']['location']['lat']
그 마음은 [results[ ]内の] [1個目の{ }内の] [geometryの] [locationの] [lat]의 의미. JSON의 기술을 잘 보면 그대로 되어 있는 것을 알 수 있다.

잘 보았다.



개행 포인트는 텍토이지만, 나름대로 정리해 보았다.
results=[{geometry={location={lng=139.8107004, lat=35.7100627}, 
                    location_type=ROOFTOP, 
                    viewport={northeast={lng=139.8120493802915, lat=35.7114116802915}, 
                              southwest={lng=139.8093514197085, lat=35.7087137197085}}}, 
          place_id=ChIJ35ov0dCOGGARKvdDH7NPHX0, 
          address_components=[{long_name=2, short_name=2, types=[premise]}, 
                              {short_name=1, long_name=1, types=[political, sublocality, sublocality_level_4]}, 
                              {types=[political, sublocality, sublocality_level_3], long_name=1丁目, short_name=1丁目}, 
                              {short_name=押上, long_name=押上, types=[political, sublocality, sublocality_level_2]}, 
                              {types=[locality, political], long_name=墨田区, short_name=墨田区}, 
                              {short_name=東京都, long_name=東京都, types=[administrative_area_level_1, political]}, 
                              {short_name=JP, types=[country, political], long_name=日本}, 
                              {types=[postal_code], short_name=131-8634, long_name=131-8634}], 
          plus_code={compound_code=PR66+27 日本、東京都墨田区, global_code=8Q7XPR66+27}, 
          types=[establishment, point_of_interest, tourist_attraction], 
          formatted_address=日本、〒131-8634 東京都墨田区押上1丁目1−2}]

원시 JSON보다 열심히 할 것 같아 (웃음)
순서대로 살펴보면, results[]가 있고, 그 중의 1번째의 { }안의, geometry의, location의 lat,로 확실히 위도까지 추적한다.

연습



우편번호를 읽으려면 "short_name=131-8634"까지 가는 길을 찾는다. 위도와 비교해 먼 orz 이런 때는, 나름대로 정리한 JSON 기술로부터, 불필요한 부분을 삭제.
results=[{address_components=[{}, 
                              {}, 
                              {}, 
                              {}, 
                              {}, 
                              {}, 
                              {}, 
                              {short_name=131-8634,}],

무슨 일입니까, 장인의 기술로 전망이 ヽ(*´∀`)노

방금 생각해보면, results[ ]안의, 1번째의 { }안의, address_components[ ]안의 ,8번째의 { }안의, short_name, 라고 하는 것이 되므로, GAS에서 작성하는 방법은
['results'][0]['address_components'][7]['short_name']
될 것입니다.

시도해 보았습니다.



코드는 이쪽
function myFunction() {

  var geo = Maps.newGeocoder();
  geo.setLanguage('ja');
  var response = geo.geocode('スカイツリー');

  var zip = response['results'][0]['address_components'][7]['short_name'];

  Logger.log(zip);

}

그리고 로그는 이쪽

분명히 정답!

이것으로 JSON 형식의 기술도 무서워하지 않아.++(´∀`)

오시마

좋은 웹페이지 즐겨찾기