2013-03-08 4 views
8

json_encode를 사용하여 배열에서 json 인코딩 된 문자열을 생성하는 데 문제가 있습니다.배열 0 키로 PHP json_encode 문제

문제의 배열의 섹션이

RatingDistribution (Array, 11 elements) 
    0 (Array, 1 element) 
     0 (String, 3 characters) 4.5 
    1 (Array, 1 element) 
     1 (String, 4 characters) 11.9 
    2 (Array, 1 element) 

처럼 보이지만 문자열이 생산

:

"RatingDistribution":[["4.5"],{"1":"11.9"}, 

내가이 기대 :

"RatingDistribution":[{"0":"4.5"},{"1":"11.9"}, 

모든 나 ' 내가하는 일은 다음과 같습니다.

$result = json_encode($array); 

내가 잘못했거나 0 키가 있는지 확인하기 위해 더 많은 코드가 필요합니까?

건배 앤디

+1

당신이 PHP 코드를 게시 할 수 있습니까? 또는 print_r 배열? 당신의 forearch가 틀린 것처럼 본다. –

+0

나는 두 번째 요소 (인덱스 1)에 나사가 있다고 생각하는데, 그 이유는 배열이 1부터 시작하여 문자열 키로 해석되기 때문입니다. – TFennis

답변

-1

COU가 strval 또는 (문자열)와 예를 들어 문자열로 배열 키를 캐스팅해야 할 수 있습니다.

+1

댓글이어야합니다! – sandip

+1

그건 내 첫 번째 생각했지만 그것은 따옴표로 묶는 아무런 차이가 없었지만 그것은 매우 지저분한 json을 만든다 : –

14

결과가 예상됩니다. json_encode은 배열에서 숫자 키만 사용하고 있음을 감지하므로이를 JSON의 객체 대신 배열로 변환합니다. 대부분의 경우, 그게 바로 당신이하고 싶은 일입니다. 어떤 이유로 그렇게하지 않으면

는 (왜?), PHP에서> = 5.3 당신이 원하는 출력을 얻을 수있는 JSON_FORCE_OBJECT 플래그를 사용할 수 있습니다

$result = json_encode($array, JSON_FORCE_OBJECT); 
+0

동작이 좀 이상하다, 예를 들어 첫 번째 값은 모든 후속 값이 객체가 될 배열로 디코드 될 것이다. . –

+0

나는 우리가 JSON_FORCE_OBJECT를 사용해야 할 것으로 의심한다. –

+0

@ user2147830 :별로 이상하지 않은 IMHO. 두 번째 배열의 첫 번째 키는 '0'이 아니므로 휴리스틱 스가 "OK, this is a associative array"를 결정하는 데 충분합니다. – Jon

1

당신이 당신의 JSON에서 배열을 사용하려면 JSON_FORCE_OBJECT 매개 변수 대신 단순히 배열을 객체로 캐스트 할 수 있습니다.

문제 :

json_encode([0 => [1,2,3]]); // Return: [[1,2,3]] 
json_encode(["0" => [1,2,3]]); // Return: [[1,2,3]] 
json_encode([1 => [1,2,3]]); // Return: {"1":[1,2,3]} 

하지 우리가 기대하는 것 :

json_encode([0 => [1,2,3]], JSON_FORCE_OBJECT); // Return: {"0":{"0":1,"1":2,"2":3}} 

해결 방법 : 배열 어디서

json_encode((object)[0 => [1,2,3]]); // Return: {"0":[1,2,3]} 
json_encode(new \ArrayObject([0 => [1,2,3]])); // Return: {"0":[1,2,3]}