Search code examples
actionscript-3flex4.5

as3corelib can't decode JSON String with JSON.decode();


I am working on an inDesign Extension in flex where I am encoding an object to JSON and then later trying to create an object from the JSON String.

The Class I am encoding with JSOD.encode() public class ManualProductLink {

    private var _productID:String;
    private var _productName:String;
    private var _productDescription:String;
    private var _productPrice:String;

    public function ManualProductLink(productID:String, productName:String, productDescription:String, productPrice:String):void {
        this._productID = productID;
        this._productName = productName;
        this._productDescription = productDescription;
        this._productPrice = productPrice;
    }

    public function get productID():String
    {
        return _productID;
    }

    public function set productID(value:String):void
    {
        _productID = value;
    }

    public function get productName():String
    {
        return _productName;
    }

    public function set productName(value:String):void
    {
        _productName = value;
    }

    public function get productDescription():String
    {
        return _productDescription;
    }

    public function set productDescription(value:String):void
    {
        _productDescription = value;
    }

    public function get productPrice():String
    {
        return _productPrice;
    }

    public function set productPrice(value:String):void
    {
        _productPrice = value;
    }

}

This is the function where I encode the object

        /**
     * Creates ManualProductLink, encodes to JSON and sends it to AsCppBridge
     */
    public function manualProductLink(productID:String, productName:String, productDescription:String, productPrice:String):void {
        var manualProductLinkl:ManualProductLink = new ManualProductLink(productID, productName, productDescription, productPrice);
        bridge.saveManualProductLink(JSON.encode(manualProductLinkl));
    }

The resulting JSON String is:

{"productName":"testName","productDescription":"testDescription","productID":"testID","productPrice":"100.00"}

My problem is in decoding the String, I am trying some thing like this:

public function getManualProductLinkJSON():ManualProductLink {
        var jsonString:String = bridge.getManualProductLink() as String;
        var data:ManualProductLink = JSON.decode(jsonString) as ManualProductLink;

        var manualProductLink:ManualProductLink = new ManualProductLink(data.productID, data.productName, data.productDescription, data.productPrice);

        return manualProductLink;
    }

however trying to get variables from the returned object like this:

var str:String = manualProductLink.productID;

doesn't work for me.

I would appreciate some help decoding the JSON String to an object similar to the original object.


Solution

  • Seems like I can answer my own question:

    public function getManualProductLinkJSON():ManualProductLink {
        var jsonString:String = bridge.getManualProductLink() as String;
        var data:Object = JSON.decode(jsonString);
    
        var manualProductLink:ManualProductLink = new ManualProductLink(data.productID, data.productName, data.productDescription, data.productPrice);
    
        return manualProductLink;
    }
    

    I could not decode directly in to the encoded object, but by decoding in to data:Object it was possible to recreate the original object.