2008-10-01 2 views
5

인터 웹은 이것에 도움이되지 않습니다. 우리는 serializeJSON을 사용하여 ColdFusion에서 데이터를 인코딩하고 json_decode을 사용하여 PHP로 디코딩하려고합니다. 대부분의 경우 이는 정상적으로 작동하지만 경우에 따라 json_decodeNULL을 반환합니다. 우리는 분명한 범인을 찾았지만 serializeJSON은 예상대로 형식화 된 것 같습니다. 그 밖의 무엇이 문제 일 수 있습니까?누구나 ColdFusion의 serializeJSON 메소드에서 PHP의 json_decode로 이슈가 있습니까?

업데이트 : 두 사람이 (현명하게) 문제의 원인이되는 결과를 게시하도록 요청했습니다. 나는 우리가 방금 결과 세트가 우리의 모든 데이터 (총 565,135 ASCII 문자에 대한 2300+ 임대 속성에 대한 정보 나열)임을 발견했다는 것을 제외하고는 그러할 것입니다. 그것은 문제가 될 수 있지만, 문자열에 대한 최대 크기에 대해서는 PHP 문서에서 아무것도 볼 수 없었습니다. 거기에 제한 요인은 무엇입니까? 램?

업데이트 2 : 두 명의 사용자가 "똑똑한"따옴표로 Microsoft Word 텍스트를 복사하여 붙여 넣은 것이 문제인 것처럼 보입니다. 그 성가신 사용자 ...

+0

) (json_decode에 전달하기 전에 문자열을 수정 NULL로 디코딩하는 JSON 출력의 예가 있습니까? – modius

+0

이것은 큰 질문/문제입니다. 행운을 해결 했니? 그 따옴표는 항상 살인자라는 것을 기억합니다. 플래시로 출력하십시오. MB를 사용하여 인코딩을 수정 한 다음 효과가 있다고 생각합니다. 기억이 안납니다. – Till

+0

cflib.org에는 Word에서 삽입하는 무작위 항목을 제거하기위한 훌륭한 'demoronizer'UDF가 있습니다. –

답변

1

이 문제를 안정적으로 복제 할 수 있습니까? 그렇다면 null을 리턴하는 샘플 데이터를 게시 할 수 있습니까? 나는 당신이 이것을 알고있을 것이라고 확신하지만 다른 사람들이 정보를 얻지 못하는 사람들을 위해 RFC 4627은 JSON을 기술하고 있으며 유효한 자바 스크립트가 유효한 JSON이라고 가정하는 것은 일반적인 실수입니다. JSON을 자바 스크립트의 하위 집합으로 생각하는 것이 좋습니다. 편집에 응답

:

내가 (이 json_decode에 건네되고되기 전에) 당신의 정보가 당신의 PHP 스크립트에 채워되고 있는지 확인 점검하고, 또한 특히 경우 (해당 정보를 확인하는 게 좋을 것 오류를 확실하게 재현 할 수 있음). 편의를 위해 online validator을 사용해보세요. 매우 제한된 정보를 기반으로하면 아마도 시간이 초과되어 모든 데이터를 포착하지 못했을 것 같습니다. 그러한 대규모 데이터 세트가 필요합니까?

0

다른 파서와 구문 분석을 시도해보고 오류를 찾을 수 있습니다. 파이썬의 JSON 파서가 매우 높은 품질임을 압니다. 파이썬을 설치했다면 demjson의 구문 검사기를 통해 텍스트를 실행할 수 있습니다. 매우 큰 데이터 세트 인 경우 내 라이브러리 jsonlib을 사용할 수 있습니다. 메모리 사용량이 demjson보다 높지만 C로 작성 되었기 때문에 더 빨리 실행됩니다.

2

UTF-8에서 작동 해 볼 수도 있고 PHP 그 사실을 알아라.

PHP의 에 UTF-8 JSON 문자열 (사용자가 가지고있는 둥근 따옴표 이외의 "이상한"문자가 있음)을 디코딩 할 수 없다는 문제가있었습니다. 내 솔루션은 PHP에 제출하는 HTML 페이지에 Content-Type 메타 태그를 삽입하여 UTF-8 모드로 작업하고 있음을 PHP에 알리는 것입니다. json으로 문자열 제출 된 데이터의 내용 유형, 또한 UTF-8이 될 것입니다 그런 식으로 : 그 후

<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> 

, PHP의 json_decode 제대로 문자열을 디코딩 할 수 있었다.

1

나는이 정확한 문제가 있었으며 ColdFusion이 JSON 패킷에 인쇄 가능한 문자를 넣지 않았기 때문에 (실제로 이러한 문자는 데이터에 존재했지만) JSON에 갈 수 없다는 것이 밝혀졌습니다.

이 사이트의 두 가지 질문으로 인해이 문제가 해결되었습니다. ColdFusion 솔루션보다는 PHP 솔루션을 사용했지만 두 가지 중에서 더 우아하다고 느꼈습니다.

PHP solution

당신이

$string = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string); 

ColdFusion solution

사용 cleanXmlString() serializeJSON 사용 후 수 있도록 해당 기능()