如何将 javascript 对象转换成 json字符串

JavaScript029

如何将 javascript 对象转换成 json字符串,第1张

javascript 对象转换成 json字符串[js对象转换成json字符串]

使用$.toJSON(Object)就可以转换了,转换之前先引入jquery.json.js

/*

* jQuery JSON Plugin

* version: 2.1 (2009-08-14)

*

* This document is licensed as free software under the terms of the

* MIT License: http://www.opensource.org/licenses/mit-license.php

*

* Brantley Harris wrote this plugin. It is based somewhat on the JSON.org

* website's http://www.json.org/json2.js, which proclaims:

* "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that

* I uphold.

*

* It is also influenced heavily by MochiKit's serializeJSON, which is

* copyrighted 2005 by Bob Ippolito.

*/

(function($) {

/** jQuery.toJSON( json-serializble )

Converts the given argument into a JSON respresentation.

If an object has a "toJSON" function, that will be used to get the representation.

Non-integer/string keys are skipped in the object, as are keys that point to a function.

json-serializble:

The *thing* to be converted.

**/

$.toJSON = function(o)

{

if (typeof(JSON) == 'object' &&JSON.stringify)

return JSON.stringify(o)

var type = typeof(o)

if (o === null)

return "null"

if (type == "undefined")

return undefined

if (type == "number" || type == "boolean")

return o + ""

if (type == "string")

return $.quoteString(o)

if (type == 'object')

{

if (typeof o.toJSON == "function")

return $.toJSON( o.toJSON() )

if (o.constructor === Date)

{

var month = o.getUTCMonth() + 1

if (month <10) month = '0' + month

var day = o.getUTCDate()

if (day <10) day = '0' + day

var year = o.getUTCFullYear()

var hours = o.getUTCHours()

if (hours <10) hours = '0' + hours

var minutes = o.getUTCMinutes()

if (minutes <10) minutes = '0' + minutes

var seconds = o.getUTCSeconds()

if (seconds <10) seconds = '0' + seconds

var milli = o.getUTCMilliseconds()

if (milli <100) milli = '0' + milli

if (milli <10) milli = '0' + milli

return '"' + year + '-' + month + '-' + day + 'T' +

hours + ':' + minutes + ':' + seconds +

'.' + milli + 'Z"'

}

if (o.constructor === Array)

{

var ret = []

for (var i = 0i <o.lengthi++)

ret.push( $.toJSON(o[i]) || "null" )

return "[" + ret.join(",") + "]"

}

var pairs = []

for (var k in o) {

var name

var type = typeof k

if (type == "number")

name = '"' + k + '"'

else if (type == "string")

name = $.quoteString(k)

else

continue //skip non-string or number keys

if (typeof o[k] == "function")

continue //skip pairs where the value is a function.

var val = $.toJSON(o[k])

pairs.push(name + ":" + val)

}

return "{" + pairs.join(", ") + "}"

}

}

/** jQuery.evalJSON(src)

Evaluates a given piece of json source.

**/

$.evalJSON = function(src)

{

if (typeof(JSON) == 'object' &&JSON.parse)

return JSON.parse(src)

return eval("(" + src + ")")

}

/** jQuery.secureEvalJSON(src)

Evals JSON in a way that is *more* secure.

**/

$.secureEvalJSON = function(src)

{

if (typeof(JSON) == 'object' &&JSON.parse)

return JSON.parse(src)

var filtered = src

filtered = filtered.replace(/\\["\\\/bfnrtu]/g, '@')

filtered = filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')

filtered = filtered.replace(/(?:^|:|,)(?:\s*\[)+/g, '')

if (/^[\],:{}\s]*$/.test(filtered))

return eval("(" + src + ")")

else

throw new SyntaxError("Error parsing JSON, source is not valid.")

}

/** jQuery.quoteString(string)

Returns a string-repr of a string, escaping quotes intelligently.

Mostly a support function for toJSON.

Examples:

>>>jQuery.quoteString("apple")

"apple"

>>>jQuery.quoteString('"Where are we going?", she asked.')

"\"Where are we going?\", she asked."

**/

$.quoteString = function(string)

{

if (string.match(_escapeable))

{

return '"' + string.replace(_escapeable, function (a)

{

var c = _meta[a]

if (typeof c === 'string') return c

c = a.charCodeAt()

return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16)

}) + '"'

}

return '"' + string + '"'

}

var _escapeable = /["\\\x00-\x1f\x7f-\x9f]/g

var _meta = {

'\b': '\\b',

'\t': '\\t',

'\n': '\\n',

'\f': '\\f',

'\r': '\\r',

'"' : '\\"',

'\\': '\\\\'

}

})(jQuery)

Obj2str: function(o) {

if (o == undefined) {

return ""

}

var r = []

if (typeof o == "string") return "\"" + o.replace(/([\"\\])/g, "\\$1").replace(/(\n)/g, "\\n").replace(/(\r)/g, "\\r").replace(/(\t)/g, "\\t") + "\""

if (typeof o == "object") {

if (!o.sort) {

for (var i in o)

r.push("\"" + i + "\":" + fn.Obj2str(o[i]))

if (!!document.all &&!/^\n?function\s*toString\(\)\s*\{\n?\s*\[native code\]\n?\s*\}\n?\s*$/.test(o.toString)) {

r.push("toString:" + o.toString.toString())

}

r = "{" + r.join() + "}"

} else {

for (var i = 0i <o.lengthi++)

r.push(fn.Obj2str(o[i]))

r = "[" + r.join() + "]"

}

return r

}

return o.toString().replace(/\"\:/g, '":""')

}