2015-01-26 2 views
1

Я создаю JSON в JavaScript таким образомстранное поведение json_decode

jsonArr.push({ 
      position: 'WN', 
      wind: windWN, 
      wave: waveWN, 
      sea: seaWN 
     }); 
     var myJsonString = JSON.stringify(jsonArr); 

Я посылаю его с помощью метода AJAX с jsonData: jsonData:Ext.encode(myJsonString)

Мой массив JSON выглядит, что, когда я посылаю это: enter image description here

В PHP стороне, я получаю JSON и декодирования его таким образом:

$rawpostdata = file_get_contents("php://input"); 
$rawpostdata2 = json_decode($rawpostdata, true); 

Я пробовал print_r($rawpostdata2[1]); и получил '{', как второй символ «строки», и я не могу понять, почему.

В другой стороны, я попытался print_r($rawpostdata), вырезано/мимо результата в $ строки и перепроверять мой json_decode так:

$rawpostdata = file_get_contents("php://input"); 
// print_r($rawpostdata); 
$string = '[{"position":"N","wind":"2","wave":"65","sea":"65"},{"position":"E","wind":"3","wave":"5","sea":"6"},{"position":"S","wind":"56","wave":"4","sea":"8"},{"position":"W","wind":"1","wave":"56","sea":"84"},{"position":"NE","wind":"5","wave":"6","sea":"65"},{"position":"ES","wind":"6","wave":"45","sea":"6"},{"position":"SW","wind":"69","wave":"8","sea":"4"},{"position":"WN","wind":"7","wave":"8","sea":"56"}]'; 
$rawpostdata2 = json_decode($string,true); 
print_r ($rawpostdata2[1]); 

Это дает мне правильный результат!

Array ( [положение] => E [ветер] => 3 [волна] => 5 [море] => 6)

Есть ли у вас какие-то объяснения?

EDIT: Я делаю это работает, сделав еще один json_decode

$rawpostdata = file_get_contents("php://input"); 
$rawpostdata2 = json_decode($rawpostdata,true); 
$rawpostdata3 = json_decode($rawpostdata2,true); 

Но я не понимаю ...

ответ

3

Во-первых, необходимо создать строку JSON:

var myJsonString = JSON.stringify(jsonArr); 

Затем вы снова кодировать полученную строку в JSON:

Ext.encode(myJsonString) 

Таким образом, вы должны json_decode() дважды в PHP.

+0

Спасибо! – So4ne

1

Попробуйте использовать $ _POST вместо file_get_contets(), который дает вам string.

+0

Теперь я понимаю, почему мой массив больше не массив ... – So4ne

1

вам нужно сделать приведение типа в результате json_decode, как это:

<?php 
    $rawpostdata = file_get_contents("php://input"); 
    $rawpostdata2 = (array) json_decode($rawpostdata,true); 
?> 

Я надеюсь, что это работает для вас .. Ура .. !!

Смежные вопросы