【问题标题】:Good way to convert JSON to Array将 JSON 转换为数组的好方法
【发布时间】:2015-06-01 19:39:25
【问题描述】:

我正在尝试将 json 响应转换为动作脚本 3 中的数组。

这是我的 JSON 响应:

[{
    "id": 1,
    "klistid": 8017,
    "name": "List item name",
    "description": "List item description",
    "type": 1,
    "offset": 300,
    "req": "gfi"
},
{
    "id": 2,
    "klistid": 8018,
    "name": "List item name",
    "description": "List item description",
    "type": 1,
    "offset": 600,
    "req": "gfi"
},
{
    "id": 3,
    "klistid": 8019,
    "name": "List item name",
    "description": "List item description",
    "type": 1,
    "offset": 900,
    "req": "gfi"
}]

这是我的 ac3 代码:

    function GetLists()
    {
    var req:URLRequest = new URLRequest("http://localhost:51318/api/List/1");
    var ret:URLLoader = new URLLoader();
    ret.addEventListener(Event.COMPLETE,function(e:Event)
    {
        var jsonData:Object = JSON.decode(ret.data);
        for (var i:String in jsonData)
        {
        trace(i + ": " + jsonData[i]);
        }
    });
    ret.load(req);
    }

我将此功能分配给一个按钮,但每当我单击该按钮时,什么都没有发生。当它进入 for 循环代码时,我在 ac3 代码中添加了跟踪,它只是停止并且什么也不做。我只想将此 json 字符串转换为数组或列表以在其中进行迭代。我已经看过一些关于将 JSON 字符串转换为数组的帖子,但我都试过了,但仍然没有任何效果。

谢谢

【问题讨论】:

  • 解码时已经有了数组。 var jsonData:Object = JSON.decode(ret.data) 所以如果你做了trace(jsonData is Array) 你会得到真实的。所以你可以通过jsonData[0].id等来访问你的对象。
  • 另外,您可以只使用内置的顶级 JSON 函数 - JSON.parse(ret.data);
  • @LDMS 奇怪的是,当我用trace(jsonData is Array) 检查我的 jsonData 时我得到了错误是我的 json 字符串错误吗?
  • 不,我只是按照发布的方式进行了尝试,结果为真(作为数组)。尝试尝试ret.data 看看你得到了什么,也许问题就在那里。另外,你改用JSON.parse了吗(去掉所有对as3corelib的JSON的引用)
  • as3corelib JSON 类的性能不如原生类,你一定要切换。

标签: actionscript-3 flash actionscript


【解决方案1】:

您的 json 数据与尝试对其进行迭代的方式有所不同。

您的数据是一个包含一个元素的数组,但您尝试迭代该元素,因为它应该包含您的对象 id:1、2、3 等...当然不是。

改为从您的 json 数据中删除包装器数组,或者如果您不想这样做:

var data:Object = jsonData[0];
for (var i:String in data)
{
    trace(i)
}

【讨论】:

    【解决方案2】:

    您所要做的就是将解码后的数据转换为Array

    function GetLists()
    {
        var req:URLRequest = new URLRequest("http://localhost:51318/api/List/1");
        var ret:URLLoader = new URLLoader();
        ret.addEventListener(Event.COMPLETE,function(e:Event)
        {
            var jsonData:Array = JSON.decode(ret.data) as Array;
            for each(var obj:Object in jsonData)
            {
                trace(obj["id"] + ": " + obj["description"]);
            }
        }
        ret.load(req);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-26
      • 2017-02-14
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2017-10-11
      • 2016-07-25
      • 2019-06-17
      相关资源
      最近更新 更多