Arrays 无法在Flex中解码JSON数据

Arrays 无法在Flex中解码JSON数据,arrays,json,apache-flex,Arrays,Json,Apache Flex,我是Flex的新手。我试图使用下面的代码将JSON数据填充到Datagrid中。但我未能解码JSON数据。我在flex项目中添加了as3corelib.swc。我试图从java后端填充JSON数据,但失败了,出现了下面提到的错误(在页面末尾给出)。因此,尝试这个简单的例子来了解JSON解码器是否有效。我参考了很多网络资源,下面的代码似乎是有效的 var jsonObj:Object = (JSON.parse(event.result.toString())); var arr:ArrayCol

我是Flex的新手。我试图使用下面的代码将JSON数据填充到Datagrid中。但我未能解码JSON数据。我在flex项目中添加了as3corelib.swc。我试图从java后端填充JSON数据,但失败了,出现了下面提到的错误(在页面末尾给出)。因此,尝试这个简单的例子来了解JSON解码器是否有效。我参考了很多网络资源,下面的代码似乎是有效的

var jsonObj:Object = (JSON.parse(event.result.toString()));
var arr:ArrayCollection = new ArrayCollection(jsonObj.heroes as Array);
var arrobj:ArrayCollection = new ArrayCollection(jsonObj as Array);
this.dg.dataProvider = new ArrayCollection(jsonObj.heroes as Array);
寻求您在这方面的宝贵指导

private function applicationCompleteHandler():void
{
    var channel:AMFChannel = new AMFChannel("my-amf", "hxxp://localhost:8400/springapp/messagebroker/amf");
    var channelSet:ChannelSet = new ChannelSet();
    channelSet.addChannel(channel);
    po.channelSet = channelSet;
    //po.findAll();

    var httpService:HTTPService=new HTTPService();
    httpService.resultFormat="text";
    httpService.url="http://date.jsontest.com/?service=ip"
    httpService.method=HTTPRequestMessage.POST_METHOD;
    httpService.contentType="application/json";
    httpService.send();
    httpService.addEventListener(ResultEvent.RESULT, onJSONLoad);
}

private function onJSONLoad(event:ResultEvent):void
{
    var rawData:String=String(event.result);
    var arr:Array=(com.adobe.serialization.json.JSON.decode(rawData) as Array);
    var dp:ArrayCollection=new ArrayCollection(arr);
    dg.dataProvider=dp;

}
var jsonObj:Object = (JSON.parse(event.result.toString()));
var arr:ArrayCollection = new ArrayCollection(jsonObj.heroes as Array);
var arrobj:ArrayCollection = new ArrayCollection(jsonObj as Array);
this.dg.dataProvider = new ArrayCollection(jsonObj.heroes as Array);


不使用数组,而是使用如下所示的对象

private function onJSONLoad(event:ResultEvent):void
{
   var jsonObj:Object= com.adobe.serialization.json.JSON.decode(urlLoader.data);
   trace(jsonObj.forecastList[0].dayDesc);              

}
var jsonObj:Object = (JSON.parse(event.result.toString()));
var arr:ArrayCollection = new ArrayCollection(jsonObj.heroes as Array);
var arrobj:ArrayCollection = new ArrayCollection(jsonObj as Array);
this.dg.dataProvider = new ArrayCollection(jsonObj.heroes as Array);
我有一个不同的json格式,所以请使用您的json格式来标记对象,或者向我显示您的json格式或URL

var jsonObj:Object = (JSON.parse(event.result.toString()));
var arr:ArrayCollection = new ArrayCollection(jsonObj.heroes as Array);
var arrobj:ArrayCollection = new ArrayCollection(jsonObj as Array);
this.dg.dataProvider = new ArrayCollection(jsonObj.heroes as Array);
如果您没有问题,那么使用urlRequest和urlLoader,而不是使用httpservice,这样会更好。

谢谢Subrat和Brian

var jsonObj:Object = (JSON.parse(event.result.toString()));
var arr:ArrayCollection = new ArrayCollection(jsonObj.heroes as Array);
var arrobj:ArrayCollection = new ArrayCollection(jsonObj as Array);
this.dg.dataProvider = new ArrayCollection(jsonObj.heroes as Array);
我认为问题在于JSON输入格式。Java正在以对象结构发送JSON数据。所以我找到了一个提供JSON样本数据的网站。然后在调试时,我发现该网站以纯文本形式共享数据,这与java后端发送的数据完全不同。代码如下

private function onJSONLoad(event:ResultEvent):void
var jsonObj:Object = (JSON.parse(event.result.toString()));
var arr:ArrayCollection = new ArrayCollection(jsonObj.heroes as Array);
var arrobj:ArrayCollection = new ArrayCollection(jsonObj as Array);
this.dg.dataProvider = new ArrayCollection(jsonObj.heroes as Array);
{

var jsonObj:Object = (JSON.parse(event.result.toString()));
var arr:ArrayCollection = new ArrayCollection(jsonObj.heroes as Array);
var arrobj:ArrayCollection = new ArrayCollection(jsonObj as Array);
this.dg.dataProvider = new ArrayCollection(jsonObj.heroes as Array);
}

var jsonObj:Object = (JSON.parse(event.result.toString()));
var arr:ArrayCollection = new ArrayCollection(jsonObj.heroes as Array);
var arrobj:ArrayCollection = new ArrayCollection(jsonObj as Array);
this.dg.dataProvider = new ArrayCollection(jsonObj.heroes as Array);

虽然我在运行这段代码时遇到了一些跨域问题,但我能够调试这段代码,并且数据按照预期填充到了我的datagrid中

var jsonObj:Object = (JSON.parse(event.result.toString()));
var arr:ArrayCollection = new ArrayCollection(jsonObj.heroes as Array);
var arrobj:ArrayCollection = new ArrayCollection(jsonObj as Array);
this.dg.dataProvider = new ArrayCollection(jsonObj.heroes as Array);
因此,我可能会尝试修复从Java后端发送到UI的格式

var jsonObj:Object = (JSON.parse(event.result.toString()));
var arr:ArrayCollection = new ArrayCollection(jsonObj.heroes as Array);
var arrobj:ArrayCollection = new ArrayCollection(jsonObj as Array);
this.dg.dataProvider = new ArrayCollection(jsonObj.heroes as Array);
我在后端使用net.sf.json创建JSONArray。如果这不起作用,我将在Flex中使用RemoteObject并设法填充我的datagrid:(

var jsonObj:Object = (JSON.parse(event.result.toString()));
var arr:ArrayCollection = new ArrayCollection(jsonObj.heroes as Array);
var arrobj:ArrayCollection = new ArrayCollection(jsonObj as Array);
this.dg.dataProvider = new ArrayCollection(jsonObj.heroes as Array);

再次感谢各位。

在调用JSON.decode之前,您能发布行中
rawData
变量的内容吗?感谢Brian.rawData包含[rawData=“{ip:“129.178.182.9”}],arr变量为空。根据jsonlint.com,
{ip:“129.178.182.9”}
是有效的JSON,但
“{”ip:“129.178.182.9”}”
[rawData=“{”ip:“129.178.182.9”}]
不是。在将rawData字符串传递给解码器之前,您可能需要修剪它以确保它是有效的JSON。
var jsonObj:Object = (JSON.parse(event.result.toString()));
var arr:ArrayCollection = new ArrayCollection(jsonObj.heroes as Array);
var arrobj:ArrayCollection = new ArrayCollection(jsonObj as Array);
this.dg.dataProvider = new ArrayCollection(jsonObj.heroes as Array);