0

I want to Encode EXTjs Class to Json, But, I can't..

I use JSON.stringify, but that gives Exception with Type error.

How can I do that?

Thanks and Here my Code.

Ext.define('Text',{
    extend : 'Ext.Img',
    x : 50,
    y : 50,
    size : 100,
    text : 'Text',
    name : 'Text',
    src : ' ',
    tag : '',
    Events : []
});

var text = new Text();
var temp = JSON.stringify(text);
Saket Patel
  • 6,573
  • 1
  • 27
  • 36
LostCode
  • 533
  • 2
  • 6
  • 25

2 Answers2

8

try using

Ext.encode(Object)

it Encodes an Object, Array or other value & returns The JSON string.

refer Ext.JSON

serialize object

Community
  • 1
  • 1
MMT
  • 2,206
  • 2
  • 16
  • 25
  • I tried, but Error.. 'RangeError: Maximum call stack size exceeded' – LostCode Apr 13 '12 at 08:55
  • try `var seen = []; var temp = JSON.stringify(text, function(key, val) { if (typeof val == "object") { if (seen.indexOf(val) >= 0) return undefined seen.push(val) } return val }); console.log(temp); ` – MMT Apr 13 '12 at 09:38
  • But, I solve this problem, but it is not smart.. I made parser for Class. That error's cause is the Ext core is include in Class. So I made Parser. I get Idea from your answer. Thanks! If you know other way, Please tell me. – LostCode Apr 13 '12 at 10:12
5

The problem here is that ExtJS creates internal references on the objects, which turn out to be cyclical. Thus, the default JSON serializer fails.

You need to manually define a toJSON method which will be called by JSON.stringify:

Ext.define('Text', {
    extend : 'Ext.Img',
    x : 50,
    y : 50,
    size : 100,
    text : 'Text',
    name : 'Text',
    src : ' ',
    tag : '',
    Events : [],

    toJSON: function () {
        return 'Whatever you like' + this.text + this.size // etc.
    }

});

JSON.stringify(new Text()); // "Whatever you likeText100"
user123444555621
  • 148,182
  • 27
  • 114
  • 126