AS3-Objekt Zu JSON
Ich versuche zu konvertieren, die ein array von Objekten (nested), um JSON-string.
Hier mein JSON-Ausgabe:
[{
"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
}]
Und wenn ich versuche zu konvertieren string in XML (server-Seite) kommt heraus wie diese:
<?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>
Aber ich brauche es so:
<pages>
<page>
</page>
<page>
</page>
</pages>
Dies ist mein code zum konvertieren von Objekt-arrays in 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);
Jede Idee, warum es das rendering JSON-string, wie Sie nicht in den gleichen Knoten (separaten Knoten für jedes Element auf der Seite)?
Hoffe, ich habe klar gewesen. Danke.
warum gehst du nicht einfach machen, die gewünschten xml-Daten? ActionScript 3 hat eine ziemlich robuste
XML
Umsetzung. Aber abgesehen davon, dass eine JSON-Struktur, die aussah wie: pages: { page: [] }
würde wahrscheinlich funktionieren.
InformationsquelleAutor Kaner TUNCEL | 2012-10-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wahrscheinlich der einfachste Weg zu konvertieren eine AS3-Objekt ein JSON-string ist, verwenden Sie die JSON-Klasse von as3corelib.
Beispiel:
Ist es wahrscheinlich am besten nicht to schreiben Sie Ihre eigenen parser, der as3corelib-JSON-parser gearbeitet hat und von vielen Menschen genutzt, für einige Zeit.
EDIT: @dpcao erwähnt, dass Sie nicht sogar brauchen, um eine externe Bibliothek mehr, Adobe hat eine neue JSON-Klasse verfügbar in FlashPlayer 11.
Beispiel:
InformationsquelleAutor Adam Harte
Sind Sie Durchlaufen ein systemeigenes Objekt? Oder durch ein XML-Objekt? Denn wenn Sie Durchlaufen ein [XMLList][1] Sie verwenden sollten, Länge(), nicht die Länge (Sie nannten es als eine Funktion zu vermeiden, Namen zu Sammlungen)
Aber ehrlich gesagt, verwenden Sie JSONLib, oder [systemeigen][2], die mit dem Flash Player 10.3 oder höher, verwenden Sie es nativ. Es ahmt die javascript-api mit JSON.parse und JSON.stringify beziehungsweise. Dies sollte nicht ein Problem mit JSON-Serialisierung, haben Sie möglicherweise ein Fehler des server-Seite oder client-Seite mit Ihrem Serialisierung. Ich würde vorschlagen, das hinzufügen einer serialize () - Funktion für jedes Ihrer Objekte-das macht es langfristig einfacher zu pflegen sowieso. ie:
Dadurch wird es leichter zu Debuggen, einzelne Objekte zu sehen, wo das problem herkommt. Wie es aussieht, gibt es keinen Grund, warum dein code sollte nicht Arbeit. Allerdings könnte es Probleme mit der Serialisierung von actionscript-Klasse und nicht das hinzufügen einer variable-Knoten: d.h. serialisieren [] anstatt { "name": Wert }. Versuchen Sie die systemeigene Serialisierung und sehen, was passiert. (vergessen Sie nicht -swf-version=16)
InformationsquelleAutor ansiart