이 URL을 호출하면 : https://dogsatmyjob.tumblr.com/api/read/json?id=165570102911
다음과 같은 문자열 응답을 얻습니다.
var tumblr_api_read = {"tumblelog":{"title":"Dogs At My Job","description":"<p>Just a simple collection of the pups that I see everyday at my dog care job.<\/p>","name":"dogsatmyjob","timezone":"US\/Mountain","cname":false,"feeds":[]},"posts-start":0,"posts-total":1359,"posts-type":false,"posts":[{"id":"165570102911","url":"https:\/\/dogsatmyjob.tumblr.com\/post\/165570102911","url-with-slug":"https:\/\/dogsatmyjob.tumblr.com\/post\/165570102911\/dogsatmyjob-catcher-is-always-camera-ready","type":"photo","date-gmt":"2017-09-21 04:00:40 GMT","date":"Wed, 20 Sep 2017 22:00:40","bookmarklet":0,"mobile":0,"feed-item":"","from-feed-id":0,"unix-timestamp":1505966440,"format":"html","reblog-key":"FpmqGk7D","slug":"dogsatmyjob-catcher-is-always-camera-ready","is-submission":false,"like-button":"<div class=\"like_button\" data-post-id=\"165570102911\" data-blog-name=\"dogsatmyjob\" id=\"like_button_165570102911\"><iframe id=\"like_iframe_165570102911\" src=\"https:\/\/assets.tumblr.com\/assets\/html\/like_iframe.html?_v=66c22ab5319d742bca5762b8d18f9d06#name=dogsatmyjob&post_id=165570102911&color=black&rk=FpmqGk7D&root_id=159690206439\" scrolling=\"no\" width=\"20\" height=\"20\" frameborder=\"0\" class=\"like_toggle\" allowTransparency=\"true\" name=\"like_iframe_165570102911\"><\/iframe><\/div>","reblog-button":"<a href=\"https:\/\/www.tumblr.com\/reblog\/165570102911\/FpmqGk7D\" class=\"reblog_button\"style=\"display: block;width:20px;height:20px;\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 21 21\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" fill=\"#000\"><path d=\"M5.01092527,5.99908429 L16.0088498,5.99908429 L16.136,9.508 L20.836,4.752 L16.136,0.083 L16.1360004,3.01110845 L2.09985349,3.01110845 C1.50585349,3.01110845 0.979248041,3.44726568 0.979248041,4.45007306 L0.979248041,10.9999998 L3.98376463,8.30993634 L3.98376463,6.89801007 C3.98376463,6.20867902 4.71892527,5.99908429 5.01092527,5.99908429 Z\"><\/path><path d=\"M17.1420002,13.2800293 C17.1420002,13.5720293 17.022957,14.0490723 16.730957,14.0490723 L4.92919922,14.0490723 L4.92919922,11 L0.5,15.806 L4.92919922,20.5103758 L5.00469971,16.9990234 L18.9700928,16.9990234 C19.5640928,16.9990234 19.9453125,16.4010001 19.9453125,15.8060001 L19.9453125,9.5324707 L17.142,12.203\"><\/path><\/svg><\/a>","state":"published","note-count":"219","reblogged-from-url":"https:\/\/dogsatmyjob.tumblr.com\/post\/159690206439\/catcher-is-always-camera-ready","reblogged-from-name":"dogsatmyjob","reblogged-from-title":"Dogs At My Job","reblogged_from_avatar_url_512":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_512.png","reblogged_from_avatar_url_128":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_128.png","reblogged_from_avatar_url_96":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_96.png","reblogged_from_avatar_url_64":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_64.png","reblogged_from_avatar_url_48":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_48.png","reblogged_from_avatar_url_40":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_40.png","reblogged_from_avatar_url_30":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_30.png","reblogged_from_avatar_url_24":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_24.png","reblogged_from_avatar_url_16":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_16.png","reblogged-root-url":"https:\/\/dogsatmyjob.tumblr.com\/post\/159690206439\/catcher-is-always-camera-ready","reblogged-root-name":"dogsatmyjob","reblogged-root-title":"Dogs At My Job","reblogged_root_avatar_url_512":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_512.png","reblogged_root_avatar_url_128":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_128.png","reblogged_root_avatar_url_96":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_96.png","reblogged_root_avatar_url_64":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_64.png","reblogged_root_avatar_url_48":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_48.png","reblogged_root_avatar_url_40":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_40.png","reblogged_root_avatar_url_30":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_30.png","reblogged_root_avatar_url_24":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_24.png","reblogged_root_avatar_url_16":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_16.png","tumblelog":{"title":"Dogs At My Job","name":"dogsatmyjob","cname":false,"url":"https:\/\/dogsatmyjob.tumblr.com\/","timezone":"US\/Mountain","avatar_url_512":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_512.png","avatar_url_128":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_128.png","avatar_url_96":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_96.png","avatar_url_64":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_64.png","avatar_url_48":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_48.png","avatar_url_40":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_40.png","avatar_url_30":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_30.png","avatar_url_24":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_24.png","avatar_url_16":"https:\/\/66.media.tumblr.com\/avatar_89ca7a2e202d_16.png"},"photo-caption":"<p><a href=\"https:\/\/dogsatmyjob.tumblr.com\/post\/159690206439\/catcher-is-always-camera-ready\" class=\"tumblr_blog\">dogsatmyjob<\/a>:<\/p>\n\n<blockquote><p>Catcher is always camera-ready.<\/p><\/blockquote>","width":960,"height":1280,"photo-url-1280":"https:\/\/66.media.tumblr.com\/cac87bd90ea04d2ed28194aed7a79308\/tumblr_oojzetRpQD1w71lqmo1_1280.jpg","photo-url-500":"https:\/\/66.media.tumblr.com\/cac87bd90ea04d2ed28194aed7a79308\/tumblr_oojzetRpQD1w71lqmo1_500.jpg","photo-url-400":"https:\/\/66.media.tumblr.com\/cac87bd90ea04d2ed28194aed7a79308\/tumblr_oojzetRpQD1w71lqmo1_400.jpg","photo-url-250":"https:\/\/66.media.tumblr.com\/cac87bd90ea04d2ed28194aed7a79308\/tumblr_oojzetRpQD1w71lqmo1_250.jpg","photo-url-100":"https:\/\/66.media.tumblr.com\/cac87bd90ea04d2ed28194aed7a79308\/tumblr_oojzetRpQD1w71lqmo1_100.jpg","photo-url-75":"https:\/\/66.media.tumblr.com\/cac87bd90ea04d2ed28194aed7a79308\/tumblr_oojzetRpQD1w71lqmo1_75sq.jpg","photos":[],"tags":["catcher","german shepherd","germanshepherd","cute","adorable","beautiful","dog","dogs","puppy","puppies","dogsatmyjob","dogblr"]}]};
문제는 이것이 json 본문의 서명 문자열이라는 것입니다. 뿐만 아니라은 /
로 표시 \/
되므로 구문 분석해야 할뿐만 아니라 이러한 문자도 이스케이프해야합니다.
이것을 파싱하는 가장 좋은 방법은 무엇입니까? 그래서 객체 / 배열로 취급 할 수 있습니까?
API 문서에서는 <script>
태그 의 소스로 이와 같은 URL에 액세스 할 것으로 예상합니다 . 이렇게하면 반환 된 코드가 tumblr_api_read
전역 변수를 생성합니다 .
xhr을 통해 읽을 때 할 수있는 일은 추가 return
명령문 을 사용하여 여기에서 Function 인스턴스를 만드는 것입니다 .
var tumblrObject = new Function(responseString + " return tumblr_api_read;")();
또는 후행 세미콜론과 var
일부 문자열 해커로 선언을 잘라낸 다음 남은 것을 JSON.parse()
. 슬래시 앞의 백 슬래시는 문제를 일으키지 않습니다. 이것은 실제로 JSON 표준의 일부입니다.
new Function()
접근 방식 을 사용하면 위험을 초래할 수 있다는 점을 추가해야합니다 . tumblr.com이 해킹되면 API는 나쁜 일을 시도하는 코드를 반환 할 수 있습니다. <script>
태그 접근 방식을 사용할 때도 이러한 위험이 존재 합니다. JSON.parse()
그 관점에서 문자열을 수정하고 사용하는 것이 바람직 할 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다