невозможно декодировать JSON - PullRequest
0 голосов
/ 01 декабря 2010

Я передаю URL в кодировке JSON php, сгенерированному через мою флеш-программу

Вот что я получаю, когда делаю трассировку

myObject=%5B%7B%22fullname%22%3A%22jon%20jay%20junior%22%2C%22role%22%3A%22ADMIN%22%2C%22username%22%3A%22jjj%22%7D%5D

в конце php

$jsonString = urldecode($_POST['myObject']);
$jsonString = str_replace("\\", "", $jsonString);
$data = JSON_decode($jsonString);
print_r($data);

но я ничего не понимаю, что я тут не так делаю?

код во флеше

var people:Array = new Array();
var person:Object = new Object();
var url:String = "http://localhost/ping.php";
var request:URLRequest = new URLRequest(url);
var requestVars:URLVariables = new URLVariables();
var loader:URLLoader = new URLLoader();
person.fullname = "jon jay junior";
person.username = "jjj";
person.role = "ADMIN";
people.push(person);
request.method = URLRequestMethod.POST;
requestVars.myObject = JSON.encode(people);
request.data = requestVars;
loader.load(request);
trace(request.data);

Помогите !!Кто-нибудь?

Ответы [ 4 ]

3 голосов
/ 01 декабря 2010

Вполне возможно, что у вас не установлено / включено расширение JSON, а ваш файл php.ini подавляет ошибки.Если вы используете json_decode () в других местах, игнорируйте все, что я собираюсь сказать.

Если вы не уверены и хотите проверить, установлено ли расширение JSON, просто вставьте этот фрагмент кода вновый файл PHP и просмотрите его в своем браузере:

The JSON extension is <?php print ( ! in_array( 'json', get_loaded_extensions( ) ) ) ? 'NOT' : '' ?> installed and enabled.

Если вы получите сообщение «Расширение JSON НЕ установлено и не включено.», то в этом ваша проблема.Если слово "НЕ" ... хорошо ... НЕ в выводе, то это не ваша проблема.

Надеюсь, это поможет!

1 голос
/ 01 декабря 2010
$str = "%5B%7B%22fullname%22%3A%22jon%20jay%20junior%22%2C%22role%22%3A%22ADMIN%22%2C%22username%22%3A%22jjj%22%7D%5D";

$jsonString = urldecode($str);
$jsonString = str_replace("\\", "", $jsonString);
$data = JSON_decode($jsonString);
print_r($data);

Это прекрасно работает. Вы уверены, что передаваемое значение является POST? Или, может быть, он не декодируется? Вывод значения $ jsonString на каждом шаге. Если вы используете firebug, вы можете проверить панель Net, чтобы увидеть значения, которые отправляются php вместо использования trace.

0 голосов
/ 01 декабря 2010

Я декодирую данные, закодированные в json, таким образом.

$data = urldecode(utf8_decode(stripslashes($_REQUEST['data']))); $decoded_result = json_decode($data);

Кстати: вы добавили соответствующий обработчик событий в ваш экземпляр URLLoader?

[обновление] вот пример, который работает для меня ..

//loader event handler
function ioHandler (evt:IOErrorEvent): void { trace("IOError: "+ evt.text ); }
function httpHandler (evt:HTTPStatusEvent): void { trace("HTTPStatus: "+ evt.status ); }
function completeHandler (evt:Event): void { trace(complete" ); }

var person:Object = new Object();
    person.fullname = "jon jay junior";
    person.username = "jjj";
    person.role = "ADMIN";

var people:Array = new Array();
    people.push(person);

var vars: URLVariables = new URLVariables();
    vars.data = JSON.encode(people);

var request:URLRequest  = new URLRequest();
    request.url         = "http://localhost/data.php"; 
    request.data        = vars;

var loader:URLLoader    = new URLLoader();
    loader.dataFormat   = URLLoaderDataFormat.VARIABLES;
    loader.addEventListener(Event.COMPLETE, completeHandler);
    loader.addEventListener(IOErrorEvent.IO_ERROR, ioHandler);
    loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpHandler);
    loader.load(request);

и для серверной части, этот скрипт

//the server side

<?php

$data = urldecode(utf8_decode(stripslashes($_REQUEST['data']))); 

$decoded_result = json_decode($data);

print_r($decoded_result);

?>

, который выдает следующее представление "response" в firebug

Array
(
    [0] => stdClass Object
        (
            [username] => jjj
            [fullname] => jon jay junior
            [role] => ADMIN
        )

)

надеюсь, это поможет .. добрейший

0 голосов
/ 01 декабря 2010

Ну, так как моя первая мысль была провалена, попробуйте это:

$jsonString = urldecode($_POST['myObject']);
print '1: ' . $jsonString . '<br />';
$jsonString = str_replace("\\", "", $jsonString);
print '2: ' . $jsonString . '<br />';
$data = JSON_decode($jsonString);
print_r($data);

Посмотрите, получите ли вы какой-либо вывод из # 1 или # 2.Если вы ничего не получите от # 1, измените $_POST на $_REQUEST и попробуйте это.Если вы ничего не получите от ЭТОГО ... тогда я должен сказать, что это проблема с Flash.Если это так, извините, но я не могу вам помочь.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...