【问题标题】:Cannot parse local JSON in Air无法解析 Air 中的本地 JSON
【发布时间】:2013-12-09 21:47:26
【问题描述】:

我有一个由 adobe flash CS6 spritesheet 生成器生成的 spritesheet 的 json。当我尝试阅读时,我得到了这个字符串:“ÿþ{”

JSON 看起来像这样:

 {"frames": {

    "buttons instance 10000":
    {
        "frame": {"x":0,"y":0,"w":60,"h":48},
        "rotated": false,
        "trimmed": false,
        "spriteSourceSize": {"x":0,"y":0,"w":60,"h":48},
        "sourceSize": {"w":60,"h":48}
    },
    "buttons instance 10001":
    {
        "frame": {"x":60,"y":0,"w":60,"h":48},
        "rotated": false,
        "trimmed": false,
        "spriteSourceSize": {"x":0,"y":0,"w":60,"h":48},
        "sourceSize": {"w":60,"h":48}
    },
    "buttons instance 10002":
    {
        "frame": {"x":120,"y":0,"w":60,"h":48},
        "rotated": false,
        "trimmed": false,
        "spriteSourceSize": {"x":0,"y":0,"w":60,"h":48},
        "sourceSize": {"w":60,"h":48}
    },
    "buttons instance 10003":
    {
        "frame": {"x":180,"y":0,"w":60,"h":48},
        "rotated": false,
        "trimmed": false,
        "spriteSourceSize": {"x":0,"y":0,"w":60,"h":48},
        "sourceSize": {"w":60,"h":48}
    }},
    "meta": {
    "app": "Adobe Flash CS6",
    "version": "12.0.0.481",
    "image": "panel_animations.png",
    "format": "RGBA8888",
    "size": {"w":1024,"h":2048},
    "scale": "1"
}
}

这就是我尝试读取文件的方式:

protected function load(event:MouseEvent):void
{
    file = new File();
    file.addEventListener(Event.SELECT, file_select);
    file.browseForOpen("Please select a file...", [new FileFilter("JSON", "*.json")]);
}

protected function file_select(event:Event):void
{

     selectedFile = event.currentTarget as File;
    stream = new FileStream();
    //stream.open(file, FileMode.READ);
    stream.addEventListener(Event.COMPLETE, doTrace);
    stream.openAsync(selectedFile, FileMode.READ);
        }

    private function doTrace(e:Event):void 
{
    trace(stream.readUTFBytes(stream.bytesAvailable));
}

最后,跟踪结果为“ÿþ{”,并且 stream.bytesAvailable=0。如果我尝试解析它,当然会得到错误 #1132: Invalid JSON parse input。

感谢任何帮助。

莫克斯

【问题讨论】:

  • 我在 FlashDevelop 中创建了一个新的 AIR 项目,然后将发布的 json 粘贴到一个新的文本文件中,使用您的代码读取它没有问题。你的json文件一定有问题。您是否尝试过创建一个新的?
  • 是的,生成的 json 文件是问题所在。将其内容复制粘贴到另一个 json 中解决了这个问题。谢谢你的洞察力:)

标签: json actionscript-3 air utf


【解决方案1】:

尝试改用readMultiByte()

private function doTrace(e:Event):void 
{
    trace(stream.readMultiByte(stream.bytesAvailable, File.systemCharset));
    stream.close();
}

【讨论】:

  • 我试过这个,它也不起作用。并且trace结果变成了:˙ţ{
【解决方案2】:

看来问题出在flash cs6生成的json文件上。

我创建了一个新的 json 文件,并从生成的 json 文件中复制/粘贴了内容。 它奏效了!!

我不知道为什么这会变得艰难..

【讨论】:

    【解决方案3】:

    这些是字节顺序字节。在这种情况下,您应该使用 ByteArray 的 toString 函数。

    var obj:Object = JSON.parse(bytearray.toString());

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-10
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多