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.
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.