我是Flex新手。我尝试使用以下代码将JSON数据填充到Datagrid中。但我无法解码JSON数据。我在我的flex项目中添加了as3corelib.swc。我试图从java后端填充JSON数据,但由于下面提到的错误(在页面末尾给出)它失败了。所以尝试这个简单的例子来了解JSON解码器的工作与否。我已经提到了很多互联网资源,看来下面的代码是有效的。
寻求宝贵的指导。
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;
}
JSONParseError: Unexpected o encountered
at com.adobe.serialization.json::JSONTokenizer/parseError()
at com.adobe.serialization.json::JSONTokenizer/getNextToken()
at com.adobe.serialization.json::JSONDecoder/nextToken()
at com.adobe.serialization.json::JSONDecoder/parseArray()
at com.adobe.serialization.json::JSONDecoder/parseValue()
at com.adobe.serialization.json::JSONDecoder()
at com.adobe.serialization.json::JSON$/decode()
at ProductService/po_resultHandler()
at ProductService/__po_result()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.rpc::AbstractService/dispatchEvent()
at mx.rpc.remoting.mxml::RemoteObject/dispatchEvent()
at mx.rpc::AbstractOperation/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()
at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::resultHandler()
at mx.rpc::Responder/result()
at mx.rpc::AsyncRequest/acknowledge()
at NetConnectionMessageResponder/resultHandler()
at mx.messaging::MessageResponder/result()
答案 0 :(得分:0)
而不是使用如下所示的数组使用对象
private function onJSONLoad(event:ResultEvent):void
{
var jsonObj:Object= com.adobe.serialization.json.JSON.decode(urlLoader.data);
trace(jsonObj.forecastList[0].dayDesc);
}
我有一个不同的json格式,所以使用你的json格式来对象或者显示你的json格式或URL。
如果没有问题,请使用urlRequest和urlLoader,而不是使用httpservice,这样会更好。
答案 1 :(得分:0)
谢谢Subrat&布赖恩。
我认为问题在于JSON输入格式。 Java正在以对象结构发送JSON数据。所以我找到了一个提供Sample 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);
}
<s:HTTPService id="httpService"
url="https://raw.githubusercontent.com/kronusme/dota2-api/master/data/heroes.json"
resultFormat="text" method="POST" useProxy="false" result="onJSONLoad(event)"/>
虽然我在运行此代码时遇到了跨域的一些问题,但我能够调试此代码并按预期在数据网格中填充数据。
所以我可能会尝试修复从Java后端发送到UI的格式。
我在后端使用net.sf.json来创建JSONArray。如果这不起作用,我将在Flex中使用RemoteObject并设法填充我的数据网格:(
再次感谢你们。