Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F1608262
json.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Subscribers
None
json.js
View Options
if
(
!
dojo
.
_hasResource
[
"dojo._base.json"
]){
//_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo
.
_hasResource
[
"dojo._base.json"
]
=
true
;
dojo
.
provide
(
"dojo._base.json"
);
dojo
.
fromJson
=
function
(
/*String*/
json
){
// summary:
// evaluates the passed string-form of a JSON object
// json:
// a string literal of a JSON item, for instance:
// '{ "foo": [ "bar", 1, { "baz": "thud" } ] }'
// return:
// An object, the result of the evaluation
// FIXME: should this accept mozilla's optional second arg?
try
{
return
eval
(
"("
+
json
+
")"
);
}
catch
(
e
){
console
.
debug
(
e
);
return
json
;
}
}
dojo
.
_escapeString
=
function
(
/*String*/
str
){
//summary:
// Adds escape sequences for non-visual characters, double quote and
// backslash and surrounds with double quotes to form a valid string
// literal.
return
(
'"'
+
str
.
replace
(
/(["\\])/g
,
'\\$1'
)
+
'"'
).
replace
(
/[\f]/g
,
"\\f"
).
replace
(
/[\b]/g
,
"\\b"
).
replace
(
/[\n]/g
,
"\\n"
).
replace
(
/[\t]/g
,
"\\t"
).
replace
(
/[\r]/g
,
"\\r"
);
// string
}
dojo
.
toJsonIndentStr
=
"\t"
;
dojo
.
toJson
=
function
(
/*Object*/
it
,
/*Boolean?*/
prettyPrint
,
/*String?*/
_indentStr
){
// summary:
// Create a JSON serialization of an object.
// Note that this doesn't check for infinite recursion, so don't do that!
//
// 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.
//
// 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().
//
// _indentStr:
// private variable for recursive calls when pretty printing, do not use.
//
// return:
// a String representing the serialized version of the passed object.
_indentStr
=
_indentStr
||
""
;
var
nextIndent
=
(
prettyPrint
?
_indentStr
+
dojo
.
toJsonIndentStr
:
""
);
var
newLine
=
(
prettyPrint
?
"\n"
:
""
);
var
objtype
=
typeof
(
it
);
if
(
objtype
==
"undefined"
){
return
"undefined"
;
}
else
if
((
objtype
==
"number"
)
||
(
objtype
==
"boolean"
)){
return
it
+
""
;
}
else
if
(
it
===
null
){
return
"null"
;
}
if
(
dojo
.
isString
(
it
)){
return
dojo
.
_escapeString
(
it
);
}
if
(
it
.
nodeType
&&
it
.
cloneNode
){
// isNode
return
""
;
// FIXME: would something like outerHTML be better here?
}
// recurse
var
recurse
=
arguments
.
callee
;
// short-circuit for objects that support "json" serialization
// if they return "self" then just pass-through...
var
newObj
;
if
(
typeof
it
.
__json__
==
"function"
){
newObj
=
it
.
__json__
();
if
(
it
!==
newObj
){
return
recurse
(
newObj
,
prettyPrint
,
nextIndent
);
}
}
if
(
typeof
it
.
json
==
"function"
){
newObj
=
it
.
json
();
if
(
it
!==
newObj
){
return
recurse
(
newObj
,
prettyPrint
,
nextIndent
);
}
}
// array
if
(
dojo
.
isArray
(
it
)){
var
res
=
[];
for
(
var
i
=
0
;
i
<
it
.
length
;
i
++
){
var
val
=
recurse
(
it
[
i
],
prettyPrint
,
nextIndent
);
if
(
typeof
(
val
)
!=
"string"
){
val
=
"undefined"
;
}
res
.
push
(
newLine
+
nextIndent
+
val
);
}
return
"["
+
res
.
join
(
", "
)
+
newLine
+
_indentStr
+
"]"
;
}
/*
// look in the registry
try {
window.o = it;
newObj = dojo.json.jsonRegistry.match(it);
return recurse(newObj, prettyPrint, nextIndent);
}catch(e){
// console.debug(e);
}
// it's a function with no adapter, skip it
*/
if
(
objtype
==
"function"
){
return
null
;
}
// generic object code path
var
output
=
[];
for
(
var
key
in
it
){
var
keyStr
;
if
(
typeof
(
key
)
==
"number"
){
keyStr
=
'"'
+
key
+
'"'
;
}
else
if
(
typeof
(
key
)
==
"string"
){
keyStr
=
dojo
.
_escapeString
(
key
);
}
else
{
// skip non-string or number keys
continue
;
}
val
=
recurse
(
it
[
key
],
prettyPrint
,
nextIndent
);
if
(
typeof
(
val
)
!=
"string"
){
// skip non-serializable values
continue
;
}
// FIXME: use += on Moz!!
// MOW NOTE: using += is a pain because you have to account for the dangling comma...
output
.
push
(
newLine
+
nextIndent
+
keyStr
+
": "
+
val
);
}
return
"{"
+
output
.
join
(
", "
)
+
newLine
+
_indentStr
+
"}"
;
}
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Aug 29, 02:39 (8 h, 25 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25660
Default Alt Text
json.js (4 KB)
Attached To
rZED Zed
Event Timeline
Log In to Comment