JSON Flash Player 11 和 AIR 3.0 编码
JSON encoding for Flash Player 11 and AIR 3.0
我有以下代码:
thinkGearSocket = new Socket();
var configuration : Object = new Object();
configuration["enableRawOutput"] = true;
configuration["format"] = "Json";
thinkGearSocket.connect("127.0.0.1", 13854);
thinkGearSocket.addEventListener(ProgressEvent.SOCKET_DATA, dataHandler);
thinkGearSocket.writeUTFBytes(JSON.encode(configuration));
它适用于 Flash Player 10 但对于 Flash Player 11 我收到一条错误消息:
1061: Call to a possibly undefined method encode though a reference with static type flash.net:socket
我在解码时遇到了同样的错误:
private function dataHandler(e : ProgressEvent){
//read data from the socket
var packetString : String = thinkGearSocket.readUTFBytes(thinkGearSocket.bytesAvailable);
thinkGearSocket.flush();
//split the data into an array
var packets : Array = packetString.split(/\r/);
var data:Object;
//iterate through array elements
for each (var packet:String in packets){
//sometimes the packet is empty
if(packet != "") {
try {
data = JSON.decode(packet);
//trace(packet);
} catch ( jError: JSONParseError) {
// do exception handling here
label1.text = jError.text;
}
但我改变了:
data = JSON.decode(packet);
至:
data = JSON.parse(packet);
现在我没有收到该部分的错误。如何修复 Flash Player 11 和 AIR 3.0 的编码部分?
对于 Flash 11 或更高版本,您需要使用 stringify
方法而不是编码。
stringify(value:Object, replacer:* = null, space:* = null):String
您可以在 AS3 livedocs 中查看有关 stringify 的更多信息。
我有以下代码:
thinkGearSocket = new Socket();
var configuration : Object = new Object();
configuration["enableRawOutput"] = true;
configuration["format"] = "Json";
thinkGearSocket.connect("127.0.0.1", 13854);
thinkGearSocket.addEventListener(ProgressEvent.SOCKET_DATA, dataHandler);
thinkGearSocket.writeUTFBytes(JSON.encode(configuration));
它适用于 Flash Player 10 但对于 Flash Player 11 我收到一条错误消息:
1061: Call to a possibly undefined method encode though a reference with static type flash.net:socket
我在解码时遇到了同样的错误:
private function dataHandler(e : ProgressEvent){
//read data from the socket
var packetString : String = thinkGearSocket.readUTFBytes(thinkGearSocket.bytesAvailable);
thinkGearSocket.flush();
//split the data into an array
var packets : Array = packetString.split(/\r/);
var data:Object;
//iterate through array elements
for each (var packet:String in packets){
//sometimes the packet is empty
if(packet != "") {
try {
data = JSON.decode(packet);
//trace(packet);
} catch ( jError: JSONParseError) {
// do exception handling here
label1.text = jError.text;
}
但我改变了:
data = JSON.decode(packet);
至:
data = JSON.parse(packet);
现在我没有收到该部分的错误。如何修复 Flash Player 11 和 AIR 3.0 的编码部分?
对于 Flash 11 或更高版本,您需要使用 stringify
方法而不是编码。
stringify(value:Object, replacer:* = null, space:* = null):String
您可以在 AS3 livedocs 中查看有关 stringify 的更多信息。