2012-06-19 1 views
-1

JSON처럼 해독 : 당신이 json_decode 구문 분석하기 전에 수행 할 수있는문자열의 원래 값을 보존하고 내가 목표 필드의 원래 값을 보존하고 개체로 다음 문자열을 사용하는 json_decode를 사용하려면

{ 
    "translatorID": "f4a5876a-3e53-40e2-9032-d99a30d7a6fc", 
    "label": "ACL", 
    "creator": "Nathan Schneider", 
    "target": "^https?://(www[.])?aclweb\\.org/anthology-new/[^#]+", 
    "minVersion": "1.0.7", 
    "maxVersion": "", 
    "priority": 100, 
    "browserSupport": "gcs", 
    "inRepository": true, 
    "translatorType": 4, 
    "lastUpdated": "2012-01-01 01:42:16" 
} 
+0

당신은 어떻게 그것을 코드하시기 바랍니다 디코딩 않습니다. – Sarfraz

+0

JSON을 어떻게 받고 있습니까? 그것은 나를 위해 여기에 잘 작동합니다 : http://codepad.org/io4wUjxc –

+0

나는 이것에 대한 동일한 질문이 잠시 전에 다른 사용자 이름으로 물었을 것이라 확신합니다. (편집) 그것은 삭제 된 것 같습니다. – Brian

답변

1

은 다음과 같습니다

$string = str_replace('\\', '\\\\\\\\', $string); 
var_dump(json_decode($string, true)); 

json 파서의 버그 여야합니다.
방법은 매우 깨끗하지는 않지만 적어도 결과는 나타납니다.

+0

그리고 입력이 이미 이스케이프 된 경우 어떻게해야합니까? – poncha

+0

나는 그의 입력 문자열을 기반으로 내 대답을 만들었고, 대체물로 올바른 결과를 얻었다. –

+0

그의 입력은 유효한 json이지만, 코드의 ** 문자열 ** 값에 동일한 값을 입력하고 파일/db/whatever에서 읽지 않으면 그 코드는 백 슬래시 양을 두 배로 늘려야합니다. – poncha

1

슬래시를 벗겨 봤습니까?

은 나를 위해 일한 :

$string = '{ 
    "translatorID": "f4a5876a-3e53-40e2-9032-d99a30d7a6fc", 
    "label": "ACL", 
    "creator": "Nathan Schneider", 
    "target": "^https?://(www[.])?aclweb\.org/anthology-new/[^#]+", 
    "minVersion": "1.0.7", 
    "maxVersion": "", 
    "priority": 100, 
    "browserSupport": "gcs", 
    "inRepository": true, 
    "translatorType": 4, 
    "lastUpdated": "2012-01-01 01:42:16" 
}'; 

var_dump(json_decode(stripslashes ($string))); 
+0

이것은 목표 값의 원래 값을 변경합니다. – PHPst

+0

지루한 해결책은 addcslashes와 일부 정규식을 사용하여 결과 배열/객체에 stripslashes로 이스케이프 처리되지 않은 문자를 이스케이프 처리하는 것입니다. –

관련 문제