2009-11-22 4 views
6

im twitter mashup 서비스를 사용하고 있습니다. json 데이터를 수신 할 때 twit id 중 일부는 (32 비트 서버에서 허용되는 최대 정수)보다 큽니다.32 비트 서버의 PHP json_decode

나는 정수를 문자열로 변환하는 작동하는 해결책을 생각해 냈습니다. 그런 식으로 json_decode() 함수는 배열을 생성 할 때 아무런 문제가 없습니다.

내가 달성하는 데 필요한 것입니다 :

전 (솔루션 적용)

[{"name":"john","id":5932725006},{"name":"max","id":4953467146}] 

후 (원래 JSON 데이터) 내가 생각하고

[{"name":"john","id":"5932725006"},{"name":"max","id":"4953467146"}] 

을 preg_match 구현,하지만 난 총알 - 증거를 어떻게 해야할지 모르겠다. 어떤 도움을 많이 주시면 감사하겠습니다.

답변

12

당신은 번호를 캡처 할 수 preg_replace를 사용하여 다음과 같이 뭔가를 따옴표를 추가 할 수 있습니다

$jsonString = '[{"name":"john","id":5932725006},{"name":"max","id":4953467146}]'; 

echo preg_replace('/("\w+"):(\d+)/', '\\1:"\\2"', $jsonString); 
//prints [{"name":"john","id":"5932725006"},{"name":"max","id":"4953467146"}] 

는 위의 예 here을보십시오.

+2

당신은 그 표현식에서''id ':'를 원할 것입니다. 그렇지 않으면 모든 숫자 시퀀스와 일치하며 숫자가 포함 된 문자열은 잘못됩니다. 정확히 – bobince

+0

. 그것은 잘 작동하지만 ... "id"근처의 숫자와 일치하는 것이 더 좋을 것입니다 : – andufo

+0

@bobnice : Agree, edited : – CMS

1

PHP 5.2를 사용하면 이러한 긴 ID는 부동 소수점으로 구문 분석됩니다. 이상적인 것은 아니지만 최소 21 비트의 정수 정밀도를 제공합니다.이 정수는 해당 ID를 저장하기에 충분해야합니다. (64 비트 서버는 당연히 이상적입니다.)

+0

이 서버가 실행되는 서버에는 php4 및 php5 환경이 모두 있습니다. php5를 활성화하려면 .htaccess 파일에서이 플래그를 설정해야합니다. AddType application/x-httpd-php5 .php 어쩌면이 이상한 설정으로 인해 int2float 기능을 사용할 수 없게 될 수도 있습니다. 정보를 가져 주셔서 감사합니다. – andufo

+0

그래도 작동하지만 이전 버전의 PHP5도 계속 실행 중일 수 있습니다. – bobince

0

내려 가면 big_int PECL 확장자를 사용할 수 있습니다. 이것은 PHP가 필요로하는 경우 매우 큰 숫자를 사용하게합니다. 큰 도약이지만, 마인드 니스의 경계에서 경계를 이루는 숫자를 일상적으로 다루는 경우에는 도움이 될 것입니다.