【问题标题】:Get and parse JSON in Actionscript在 Actionscript 中获取和解析 JSON
【发布时间】:2012-04-24 01:38:12
【问题描述】:

我想做的是向这个 URL 发出一个 get 请求:http://api.beatport.com/catalog/3/most-popular,它应该返回一些 JSON,然后从中解析出某些信息。

我将如何在 Actionscript 3 中执行此操作?我更关心如何将数据提供给 JSON 解析器,而不是解析 JSON,因为似乎有很多关于解析 JSON 的问题。我想在 AS3 中执行此操作的原因是我设置了 3D Flash 可视化,我想获取这些数据,解析出相关位,然后在可视化中显示解析的位。

如果有更简单的方法可以用另一种语言实现,我愿意接受除 AS3 之外可以轻松与 Flash 集成的任何其他方法。

【问题讨论】:

    标签: json flash actionscript


    【解决方案1】:
    1. corelib.swc 添加到您的库路径。

    2. 导入 JSON 库:import com.adobe.serialization.json.JSON;

    3. 使用如下代码调用您的服务:

      var request:URLRequest=new URLRequest();
      request.url=YOUR_ENDPOINT
      request.requestHeaders=[new URLRequestHeader("Content-Type", "application/json")];
      request.method=URLRequestMethod.GET;
      var loader:URLLoader=new URLLoader();
      loader.addEventListener(Event.COMPLETE, receive);
      loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, notAllowed);
      loader.addEventListener(IOErrorEvent.IO_ERROR, notFound);
      loader.load(request);
      
      protected function receive(event:Event):void
      {
           var myResults:Array=JSON.decode(event.target.data);
      }
      
    4. JSON.decode(results)解析结果。

    as3corelib 在这里维护:https://github.com/mikechambers/as3corelib#readme

    【讨论】:

    • 实际上我的主要问题是我究竟如何获得 JSON 以便我可以解析它。
    • 一旦 JSON 在该数组中,我该如何获取所需的文本。我只需要其中的特定数据。它包含有关 10 首不同歌曲的信息,对于每首歌曲,我想要歌曲的名称、艺术家、流派和唱片公司。我从未使用过 JSON 或 Actionscript。
    • JSON 解码为 AS3 中的对象。将有使用这种语法的关联数组:{someProp:someValue, someOtherProp:someOtherValue,以及使用这种语法的常规数组:[someValue, someOtherValue]。您需要结合使用 for 循环来遍历结构。要遍历对象或关联数组的属性,请使用 for-in 循环:for (var prop:String in object) {trace (object[prop]}。要遍历数组,请使用 for-each 循环:for each ( var arrayItem:Object in someArray) {trace (someItem.someProperty)}. Object.hasOwnProperty("someProp") 确认属性存在。
    • 如果您选择一个单独的属性,您可以通过多种方式访问​​它:(假设是顶级对象):myResult[someProperty][someProperty][someProperty],或者如果其中一个节点是一个数组,你可以混合数组访问:myResult[someProperty][myIndex][someProperty]。比如,myResult["metadata"]["propPointsToArray"][3]["arrayItemProp"].
    • [object Object] 是 toString() 为 vanilla 对象打印的内容。如果您想遍历 props 本身,请在 for-in 循环中跟踪 prop。如果您遍历树顶部的属性值,object[prop] 很可能是另一个对象,而不是字符串、布尔值或数字。
    【解决方案2】:

    或者,如果您使用 Flash Player 11 或 AIR 3.0 或更高版本,您可以使用内置的 JSON 对象来解码您的 JSON。这是一个顶级对象,所以你甚至不需要导入任何东西,只需这样做:

    var decoded : Object = JSON.parse(loadedText);
    

    见:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/JSON.html

    【讨论】:

      【解决方案3】:

      我相信 as3corelib 有一个 JSON serializerdeserializer

      您可以使用它们而不是重新发明轮子并重新编写解析逻辑。

      【讨论】:

        猜你喜欢
        • 2016-06-02
        • 1970-01-01
        • 2021-02-22
        • 2015-03-08
        • 2016-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-10
        相关资源
        最近更新 更多