2010-08-29 87 views
77

而不是從一個json字符串和使用$ .parseJSON,我需要把我的對象,並將其存儲在一個變量作爲字符串表示json。jquery json to string?

(我處理庫需要一個畸形的JSON類型,因此我需要更動它來得到它的工作。)

什麼是做到這一點的最好方法是什麼?

+1

可能重複(http://stackoverflow.com/questions/191881/serializing-to-json-in-jquery) – Wolph 2010-08-29 00:30:20

+0

哪個庫需要一個畸形的JSON字符串? :/ – 2010-08-29 02:00:27

+0

斯坦福JavaScript加密庫輸出並解析格式不正確的JSON,目前該錯誤正在起作用。 – Incognito 2010-08-29 05:15:37

回答

84

編輯:您應該使用Douglas Crockford的json2.js庫,而不是實現下面的代碼。它提供了一些額外的功能和更好的/舊的瀏覽器支持。

抓住json2.js文件來自:https://github.com/douglascrockford/JSON-js


// implement JSON.stringify serialization 
JSON.stringify = JSON.stringify || function (obj) { 
    var t = typeof (obj); 
    if (t != "object" || obj === null) { 
     // simple data type 
     if (t == "string") obj = '"'+obj+'"'; 
     return String(obj); 
    } 
    else { 
     // recurse array or object 
     var n, v, json = [], arr = (obj && obj.constructor == Array); 
     for (n in obj) { 
      v = obj[n]; t = typeof(v); 
      if (t == "string") v = '"'+v+'"'; 
      else if (t == "object" && v !== null) v = JSON.stringify(v); 
      json.push((arr ? "" : '"' + n + '":') + String(v)); 
     } 
     return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}"); 
    } 
}; 

var tmp = {one: 1, two: "2"}; 
JSON.stringify(tmp); // '{"one":1,"two":"2"}' 

代碼來自:http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/

+23

我會推薦[json2.js](http://www.json.org/json2.js)庫來代替這個函數,因爲它不能正確處理某些類型,比如包含'undefined',函數的屬性, (它們不是有效的JSON值),布爾對象(例如'new Boolean(true);')或'NaN'應該被替換爲'null'等等,也不支持額外的可選項參數,縮進的'replacer'函數和'spaces'編號,這些標準中[詳細描述](http://ecma262-5.com/ELS5_HTML.htm#Section_15.12.3)。 – CMS 2010-08-29 01:29:33

+3

我想也許應該是json2鏈接:https://github.com/douglascrockford/JSON-js/blob/master/json2.js – fisherwebdev 2011-10-28 22:43:10

+5

現在大多數瀏覽器都有一個原生的JSON對象,其中包括解析和stringify方法。因此,只需嘗試'JSON.stringify({})'並查看是否獲得'「{}」'而無需包含上述代碼。你甚至可以傳入參數來過濾掉鍵或做漂亮的打印,例如'JSON.stringify({a:1,b:2},null,2)'在每個鍵的前面放置一個換行符和2個空格。 – AlexChaffee 2012-04-03 15:49:28

0

您可以將JSON解析爲一個對象,然後從ajavscript對象中創建格式不正確的JSON。這可能不是最好的表現,tho。否則,如果您只需要對字符串進行非常小的更改,只需將其作爲字符串處理,然後使用標準JavaScript對其進行修改即可。

39

我用

$.param(jsonObj) 

這讓我的字符串。

+8

但是這不會創建JSON(那是問題)。 – 2011-02-23 17:11:21

+22

但這個小代碼正在做問題請求的所有標題:P – 2011-08-18 09:08:37

10

我發現,最好的方法是使用jQuery JSON

+2

爲什麼這不是一個好的答案? – VDP 2011-10-13 11:35:11

+1

,因爲它是一個jQuery的_plugin_&而不是什麼直接提供的jquery – 2012-09-22 07:47:55

+0

@ user01但jquery不包括這樣做的方式(至少它不是當我寫這個回覆,不知道現在是否如此) – 2013-04-17 11:17:40

34

大多數瀏覽器有一個原生JSON對象,這些天,其中包括parsestringify方法。所以試試JSON.stringify({})看看你是否得到"{}"。你甚至可以傳入參數來過濾掉鍵或做漂亮的打印,例如JSON.stringify({a:1,b:2}, null, 2)在每個鍵的前面放置一個換行符和2個空格。

JSON.stringify({a:1,b:2}, null, 2) 

"{\n \"a\": 1,\n \"b\": 2\n}" 

它打印爲

{ 
    "a": 1, 
    "b": 2 
} 

對於亂搞你的問題的一部分,使用第二個參數。從http://www.javascriptkit.com/jsref/json.shtml

的代用品參數可以是一個功能或 字符串/數字的陣列。它逐步遍歷JSON對象中的每個成員到 ,讓您決定每個成員應該更改的值。作爲 函數,它可以返回:

  • 數字,字符串或布爾值,它用返回值替換屬性的原始值。
  • 一個對象,它被序列化然後返回。對象方法或函數不被允許,而是被刪除。
  • 空,導致屬性被刪除。

作爲陣列,在其內部定義的值對應於當轉換成JSON對象 應當保留的 JSON對象內的屬性的名稱。 [序列化到JSON jQuery中]的