JSON调用可能未定义的方法通过具有静态类型Class的引用进行解码

时间:2014-06-01 06:36:19

标签: json actionscript-3 flash

我正在尝试从deviantArt网站解码json对象,json对象就像跟随

{
  "version": "1.0",
  "type": "photo",
  "title": "Cope",
  "url": "http://fc04.deviantart.net/fs50/f/2009/336/4/7/Cope_by_pachunka.jpg",
  "author_name": "pachunka",
  "author_url": "http://pachunka.deviantart.com",
  "provider_name": "deviantART",
  "provider_url": "http://www.deviantart.com",
  "thumbnail_url": "http://th03.deviantart.net/fs50/300W/f/2009/336/4/7/Cope_by_pachunka.jpg",
  "thumbnail_width": 300,
  "thumbnail_height": 450,
  "width": 448,
  "height": 672
}

我的代码就像这样

import flash.net.URLRequest;
import flash.events.Event;
import com.adobe.serialization.json.*;
var ldr = new URLLoader();
ldr.addEventListener(Event.COMPLETE, onload);
ldr.load(ureq);
var ureq:URLRequest = new URLRequest("http://backend.deviantart.com/oembed?        url=http%3A%2F%2Ffav.me%2Fd2enxz7");
function onload(evt:Event):void
{
  var myData:Object = JSON.decode(ldr.data);
  trace(myData.title);
}

当我运行它时会出错 通过静态类型Class

的引用调用可能未定义的方法解码

3 个答案:

答案 0 :(得分:1)

在尝试使用ldr加载之前,必须减速ureq;) 并使用本机顶级JSON解析器类

    import flash.net.URLRequest;
    import flash.events.Event;
    var ldr = new URLLoader();
    ldr.addEventListener(Event.COMPLETE, onload);
    var ureq: URLRequest = new URLRequest("http://backend.deviantart.com/oembed?url=http%3A%2F%2Ffav.me%2Fd2enxz7");

    ldr.load(ureq);
    function onload(event: Event): void {

    var myData: Object = JSON.parse(event.target.data);
    for (var key: String in myData)
    trace(key + ":" + myData[key]);
    }

答案 1 :(得分:1)

我猜您使用的是Flash Pro CS 6.0,我在Flash CS 6.0中遇到了同样的问题,但在旧版本中却没有。

似乎Adobe已将项目as3corelib的代码集成到他们的Flash IDE中。导入的JSON类被Flash Pro CS6中的集成版本覆盖,后者没有decode方法,因此您收到了错误。

您可以通过使用完整类引用调用decode方法来验证:

var myData:Object = com.adobe.serialization.json.JSON.decode(ldr.data);

你应该得到一个错误:1000: Ambiguous reference to JSON。这意味着有两个com.adobe.serialization.json.JSON副本加载到当前编译环境中。

答案 2 :(得分:-1)

在第一个源代码的帮助下,在parse()语句中使用decode代替var myData:Object = JSON.decode(ldr.data);。这样做会更好。