无法解码JSON

时间:2010-12-01 17:48:43

标签: php actionscript-3 json

我将JSON编码的URL传递给通过我的flash程序生成的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);

但我什么都不知道我在这里做错了什么?

flash中的代码

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 个答案:

答案 0 :(得分:3)

很可能您没有安装/启用JSON扩展,并且您的php.ini文件正在抑制错误。如果你正在使用json_decode()其他地方,那么就忽略我要说的一切。

如果您不确定并想查看是否安装了JSON扩展程序,只需将此代码段弹出到新的PHP文件中并在浏览器中查看:

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

如果您收到消息“未安装并启用JSON扩展。”那么这就是您的问题所在。如果单词“NOT”是......那么......不在输出中,那么这不是你的问题。

希望这有帮助!

答案 1 :(得分:1)

$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的值。

答案 2 :(得分:0)

好吧,因为我的第一个想法是破产,试试这个:

$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问题。如果是这样,我很抱歉,但我无法帮助你。

祝你好运!

答案 3 :(得分:0)

我用这种方式解码我的json编码数据..

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

btw:您是否在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);

?>

在firebug中生成以下“响应”视图

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

)

希望这会有所帮助.. 最善良