2013-07-24 7 views
0

나는이 문자열이 있습니다자바 스크립트 JSON 문자열 디코드

{\"description\": \"PSY - Gangnam Style (\\uac15\\ub0a8\\uc2a4\\ud0c0\\uc77c) \\n\\u25b6 NOW available on iTunes: http:\\\/\\\/Smarturl.it\\\/psygangnam\\n\\u25b6 Official PSY Online Store US \\u0026 International : http:\\\/\\\/psy.shop.bravadousa.com\\\/\\n\\u25b6 About PSY from YG Ent.: http:\\\/\\\/smarturl.it\\\/YGfamilyAboutPSY\\n\\u25b6 PSY's Products on eBay: http:\\\/\\\/stores.ebay.com\\\/ygentertainment\\n\\u25b6 YG-eShop: http:\\\/\\\/www.ygeshop.com\\n \\n===============================\\nPSY CONCERT \\\"HAPPENING\\\"\\n2013.4.13. SAT 6:30PM\\nTHE SEOUL WORLD CUP STADIUM\\nYouTube [email protected] http:\\\/\\\/www.youtube.com\\\/officialpsy\\nTickets: http:\\\/\\\/smarturl.it\\\/PsyHappeningKor\\nEnglish Booking: http:\\\/\\\/smarturl.it\\\/PsyHappeningEng\\n===============================\\n\\nFor More Information @\\nhttp:\\\/\\\/www.facebook.com\\\/officialpsy\\nhttp:\\\/\\\/twitter.com\\\/psy_oppa\\nhttp:\\\/\\\/twitter.com\\\/ygent_official\\nhttp:\\\/\\\/me2day.net\\\/psyfive\\nhttp:\\\/\\\/www.psypark.com\\nApp Store: http:\\\/\\\/goo.gl\\\/l9TU6\\nGoogle Play: http:\\\/\\\/goo.gl\\\/UiEn1\\n\\n\\u00a9 YG Entertainment Inc. All rights reserved.\"} 

을 그리고 난 Json으로 구문 분석 할 그것은 실패입니다. 내가 함께 "으로 \"을 변환하려고 :

tmp = tmp.replace(/\\"/gi, '"'); 

그리고로 변경 :

{"description": "PSY - Gangnam Style (\\uac15\\ub0a8\\uc2a4\\ud0c0\\uc77c) \\n\\u25b6 NOW available on iTunes: http:\\\/\\\/Smarturl.it\\\/psygangnam\\n\\u25b6 Official PSY Online Store US \\u0026 International : http:\\\/\\\/psy.shop.bravadousa.com\\\/\\n\\u25b6 About PSY from YG Ent.: http:\\\/\\\/smarturl.it\\\/YGfamilyAboutPSY\\n\\u25b6 PSY's Products on eBay: http:\\\/\\\/stores.ebay.com\\\/ygentertainment\\n\\u25b6 YG-eShop: http:\\\/\\\/www.ygeshop.com\\n \\n===============================\\nPSY CONCERT \\"HAPPENING\\"\\n2013.4.13. SAT 6:30PM\\nTHE SEOUL WORLD CUP STADIUM\\nYouTube [email protected] http:\\\/\\\/www.youtube.com\\\/officialpsy\\nTickets: http:\\\/\\\/smarturl.it\\\/PsyHappeningKor\\nEnglish Booking: http:\\\/\\\/smarturl.it\\\/PsyHappeningEng\\n===============================\\n\\nFor More Information @\\nhttp:\\\/\\\/www.facebook.com\\\/officialpsy\\nhttp:\\\/\\\/twitter.com\\\/psy_oppa\\nhttp:\\\/\\\/twitter.com\\\/ygent_official\\nhttp:\\\/\\\/me2day.net\\\/psyfive\\nhttp:\\\/\\\/www.psypark.com\\nApp Store: http:\\\/\\\/goo.gl\\\/l9TU6\\nGoogle Play: http:\\\/\\\/goo.gl\\\/UiEn1\\n\\n\\u00a9 YG Entertainment Inc. All rights reserved."} 

그러나 여기서 내가 얻을 :

PSY CONCERT \\"HAPPENING\\"\\n2013.4.13. SAT 6:30PM 

행 중 하나에서 내가 원하는 json 객체를 파싱하기 위해 유효한 문자열을 디코딩 할 디코딩 메소드가 있는지 알고 싶습니까?

+0

JSON.parse (validJSON) –

+0

입력 내용이 유효한 JSON이 아닙니다. – Alnitak

+0

입력이 올바르지 않다는 것을 알고 있고 올바른 json 문자열로 문자열을 디코딩하는 함수가 있는지 알고 싶습니다. – MTA

답변

1

문자열이 이중 이스케이프 처리되었지만 외부 구분 기호가 누락 된 것으로 보입니다.

var str = '{\\"description\\": \\"PSY - Gangnam Style (\\\\uac15\\\\ub0a8\\\\uc2a4\\\\ud0c0\\\\uc77c) … .\\"}'; 
var jsonStr = JSON.parse('"'+str+'"'), 
    obj = JSON.parse(jsonStr); 
0

그것은 수도 당신이 작동합니다 JSON을 구문 분석하기 전에없는 최고의 솔루션,하지만 문자열을 평가할 수 :

eval("tmp = \"" + tmp + "\";"); 
var tmpJSON = JSON.parse(tmp); 

을하지만 당신은 정말 안전하지 않은 아마도 알 수없는 문자열, 평가 있음을 알아 두셔야합니다 . 어쩌면 거기에 디코딩 기능이 있어도 마찬가지입니다.

왜이 기능을 사용해야합니까?

문자열은 문자열처럼 보이며 코드 조각을 쓸 때 작성합니다. 따옴표 또는 백 슬래시 자체를 인쇄하는 데 필요한 모든 이스케이프 백 슬래시가 있습니다. 그러나 그 이스케이프 문자는 실제로 문자열 안에 있으면 안되며 문자열이 어떻게 보이는지 정의해야합니다. 따라서 var str = "He said \"ok\"";을 쓰면 He said "ok"과 같은 문자열이 생성됩니다. 당신의 문자열이 실제로 이스케이프 문자를 포함하고 있기 때문에, 그것은이 대신 다음과 같이 정의된다 :이 같은 문자열을 생성합니다

var str = "He said \\\"ok\\\""; 

가 :

그는 "확인 \"

\ 말했다

이제 eval의 모든 내용이 코드 조각으로 해석됩니다. 그래서 내가 쓸 때 :

eval("str = \"" + str + "\";"); 

실행됩니다 코드의 라인은 다음과 같습니다

원하는 이스케이프 문자열 결과
str = "He said \"ok\""; 

는 :

그는 "확인"

말했다
0

바실리쿰의 접근 방식만큼 우아하지는 않지만 이중 파싱 방식만큼 정확하지는 않습니다. 이 라인을 따라, BERGI과 요나단 Lonowsky이 제안하는 것을 pproach,하지만 당신은 Javascript negative lookbehind equivalent을 사용할 수

str.replace(/\\+"/gi, function(s){return (s.length % 2) ? s : s.slice(0,-2) + '"';}) 

이 확실히 더 안전한 문자열을 평가보다.