AS3对象要JSON [英] AS3 Object To JSON

查看:164
本文介绍了AS3对象要JSON的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想转换对象(嵌套),以JSON字符串数组。 这是我的JSON输出:

I'm trying to convert an array of objects (nested) to JSON string. Here is my JSON output:

[{
    "Width": 570,
    "SessionID": 2003404006158805,
    "Price": "69,90",
    "PageCount": 24,
    "Pages": [{
        "ID": 1,
        "TemplateID": 0,
        "PageType": "cover",
        "TextContainers": [],
        "ImageContainers": []
    }, {
        "ID": 2,
        "TemplateID": 1001,
        "PageType": "single",
        "TextContainers": [],
        "ImageContainers": []
    }, {
        "ID": 3,
        "TemplateID": 0,
        "PageType": "double",
        "TextContainers": [],
        "ImageContainers": [{
            "Width": 570,
            "IsBG": true,
            "Brightness": 0,
            "Contrast": 0,
            "PosX": null,
            "ScaleX": null,
            "Height": 284,
            "ID": -1,
            "BlackWhite": 0,
            "PosY": null,
            "HasPhoto": false,
            "ScaleY": null,
            "PhotoID": null
        }]
    }, {
        "ID": 4,
        "TemplateID": 0,
        "PageType": "double",
        "TextContainers": [],
        "ImageContainers": [{
            "Width": 570,
            "IsBG": true,
            "Brightness": 0,
            "Contrast": 0,
            "PosX": null,
            "ScaleX": null,
            "Height": 284,
            "ID": -1,
            "BlackWhite": 0,
            "PosY": null,
            "HasPhoto": false,
            "ScaleY": null,
            "PhotoID": null
        }]
    }],
    "ProductSubID": 0,
    "Height": 620,
    "ProductID": 0
}]

当我试图将其转换为字符串XML(在服务器端)出来是这样的:

And when I'm trying to convert this string to XML (at server side) comes out like this:

<?xml version="1.0" encoding="UTF-8" ?>
    <0>
        <Width>570</Width>
        <SessionID>2003404006158805</SessionID>
        <Price>69,90</Price>
        <PageCount>24</PageCount>
        <Pages>
            <ID>1</ID>
            <TemplateID>0</TemplateID>
            <PageType>cover</PageType>
        </Pages>
        <Pages>
            <ID>2</ID>
            <TemplateID>1001</TemplateID>
            <PageType>single</PageType>
        </Pages>
        <Pages>
            <ID>3</ID>
            <TemplateID>0</TemplateID>
            <PageType>double</PageType>
            <ImageContainers>
                <Width>570</Width>
                <IsBG>true</IsBG>
                <Brightness>0</Brightness>
                <Contrast>0</Contrast>
                <PosX />
                <ScaleX />
                <Height>284</Height>
                <ID>-1</ID>
                <BlackWhite>0</BlackWhite>
                <PosY />
                <HasPhoto>false</HasPhoto>
                <ScaleY />
                <PhotoID />
            </ImageContainers>
        </Pages>
        <Pages>
            <ID>4</ID>
            <TemplateID>0</TemplateID>
            <PageType>double</PageType>
            <ImageContainers>
                <Width>570</Width>
                <IsBG>true</IsBG>
                <Brightness>0</Brightness>
                <Contrast>0</Contrast>
                <PosX />
                <ScaleX />
                <Height>284</Height>
                <ID>-1</ID>
                <BlackWhite>0</BlackWhite>
                <PosY />
                <HasPhoto>false</HasPhoto>
                <ScaleY />
                <PhotoID />
            </ImageContainers>
        </Pages>
        <ProductSubID>0</ProductSubID>
        <Height>620</Height>
        <ProductID>0</ProductID>
    </0>

但我需要它是这样的:

But I need it to be like:

<pages>
<page>
</page>
<page>
</page>
</pages>

这是我作为code到对象数组转换成JSON

This is my AS code to convert Object arrays into JSON

var Pages:Array = [];
            var Books:Array = [];
            var JBook:Object = new Object();

            JBook.Width = Global.BOOK_WIDTH;

            for(var i:Number = 0; i<Global.PAGES.length; i++)
            {
                var Page:PageVO = Global.PAGES[i] as PageVO;
                var JPage:Object = new Object();
                JPage.ID = Page.ID;

                var ImageContainers:Array = [];
                var TextContainers:Array = [];
                var Template:TemplateVO = Page.ACTIVE_TEMPLATE;

                for(var j:Number = 0; j<Template.IMAGE_CONTAINERS.length; j++)
                {
                    var ImageContainer:ImageContainerVO = Template.IMAGE_CONTAINERS[j] as ImageContainerVO;
                    var JImageContainer:Object = new Object();
                    JImageContainer.ID = ImageContainer.ID;
                    ImageContainers.push(JImageContainer);
                }

                for (var m:Number = 0; m<Template.TEXT_CONTAINERS.length; m++)
                {
                    var TextContainer:TextContainerVO = Template.TEXT_CONTAINERS[m] as TextContainerVO;
                    var JTextContainer:Object = new Object();
                    JTextContainer.ID = TextContainer.ID;
                }

                JPage.TextContainers = TextContainers;
                JPage.ImageContainers = ImageContainers;
                Pages.push(JPage);
            }

            var Photos:Array = [];
            for(var p:Number = 0; p<Global.PHOTOS.length; p++ )
            {
                var Photo:PhotoVO = Global.PHOTOS[p] as PhotoVO;
                var JPhoto:Object = new Object();
                JPhoto.BMP = ImageUtils.BitmapToBase64(Photo.BMP.bitmapData);
                JPhoto.UseCount = Photo.USE_COUNT;
                JPhoto.ID = Photo.ID;
                Photos.push(JPhoto);
            }


            //JBook.Photos = Photos;
            JBook.Pages = Pages;
        JSON   = com.adobe.serialization.json.JSON.encode(Books);

任何想法,为什么它的渲染JSON字符串,如他们不是在同一个节点(独立节点,每个页面的项目)?

Any idea why it's rendering JSON string like they are not in the same node (seperate node for every page item)?

希望我已经清楚了。谢谢你。

Hope I've been clear. Thanks.

推荐答案

大概是从AS3对象到JSON字符串转换的最简单的方法是使用的从的as3corelib JSON类。

Probably the easiest way to convert from an AS3 object to a JSON string is to use the JSON class from as3corelib.

实例:

var jsonString:String = JSON.encode(myDataObject);

这可能是最好不要写自己的解析器,为的as3corelib JSON解析器已经制作和使用的人很多,很长一段时间。

It is probably best not to write your own parser, as the as3corelib JSON parser has been worked on and used by many people, for quite some time.

编辑: @dpcao提到,你甚至不需要外部库了,的的Adobe推出了flash播放器11新的JSON类可用。

@dpcao mentioned that you don't even need an external library anymore, Adobe introduced a new JSON class available in FlashPlayer 11.

实例:

var jsonString:String = JSON.stringify(myDataObject);

这篇关于AS3对象要JSON的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆