yzt
2023-05-26 2f70f6727314edd84d8ec2bfe3ce832803f1ea77
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
define(["./kernel", "../json"], function(dojo, json){
 
// module:
//      dojo/_base/json
 
/*=====
return {
    // summary:
    //      This module defines the dojo JSON API.
};
=====*/
 
dojo.fromJson = function(/*String*/ js){
    // summary:
    //      Parses a JavaScript expression and returns a JavaScript value.
    // description:
    //      Throws for invalid JavaScript expressions. It does not use a strict JSON parser. It
    //      always delegates to eval(). The content passed to this method must therefore come
    //      from a trusted source.
    //      It is recommend that you use dojo/json's parse function for an
    //      implementation uses the (faster) native JSON parse when available.
    // js:
    //      a string literal of a JavaScript expression, for instance:
    //      `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'`
 
    return eval("(" + js + ")"); // Object
};
 
/*=====
dojo._escapeString = function(){
    // summary:
    //      Adds escape sequences for non-visual characters, double quote and
    //      backslash and surrounds with double quotes to form a valid string
    //      literal.
};
=====*/
dojo._escapeString = json.stringify; // just delegate to json.stringify
 
dojo.toJsonIndentStr = "\t";
dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint){
    // summary:
    //      Returns a [JSON](http://json.org) serialization of an object.
    // description:
    //      Returns a [JSON](http://json.org) serialization of an object.
    //      Note that this doesn't check for infinite recursion, so don't do that!
    //      It is recommend that you use dojo/json's stringify function for an lighter
    //      and faster implementation that matches the native JSON API and uses the
    //      native JSON serializer when available.
    // it:
    //      an object to be serialized. Objects may define their own
    //      serialization via a special "__json__" or "json" function
    //      property. If a specialized serializer has been defined, it will
    //      be used as a fallback.
    //      Note that in 1.6, toJson would serialize undefined, but this no longer supported
    //      since it is not supported by native JSON serializer.
    // prettyPrint:
    //      if true, we indent objects and arrays to make the output prettier.
    //      The variable `dojo.toJsonIndentStr` is used as the indent string --
    //      to use something other than the default (tab), change that variable
    //      before calling dojo.toJson().
    //      Note that if native JSON support is available, it will be used for serialization,
    //      and native implementations vary on the exact spacing used in pretty printing.
    // returns:
    //      A JSON string serialization of the passed-in object.
    // example:
    //      simple serialization of a trivial object
    //      |   var jsonStr = dojo.toJson({ howdy: "stranger!", isStrange: true });
    //      |   doh.is('{"howdy":"stranger!","isStrange":true}', jsonStr);
    // example:
    //      a custom serializer for an objects of a particular class:
    //      |   dojo.declare("Furby", null, {
    //      |       furbies: "are strange",
    //      |       furbyCount: 10,
    //      |       __json__: function(){
    //      |       },
    //      |   });
 
    // use dojo/json
    return json.stringify(it, function(key, value){
        if(value){
            var tf = value.__json__||value.json;
            if(typeof tf == "function"){
                return tf.call(value);
            }
        }
        return value;
    }, prettyPrint && dojo.toJsonIndentStr);    // String
};
 
return dojo;
});