2010-08-29 22 views
77

एक जेसन स्ट्रिंग से जाने और $ .parseJSON का उपयोग करने के बजाय, मुझे अपनी ऑब्जेक्ट लेने और उसे एक चर में स्टोर करने की आवश्यकता है जो जेसन का प्रतिनिधित्व करने वाली स्ट्रिंग के रूप में है।jquery जेसन स्ट्रिंग करने के लिए?

(ए पुस्तकालय मैं के साथ काम कर रहा हूँ एक विकृत json तो टाइप उम्मीद मैं इसके साथ चारों ओर गंदगी की जरूरत है यह काम करने के लिए मिलता है।)

यह करने के लिए सबसे अच्छा तरीका क्या है?

+1

[jQuery में JSON के Serializing] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/191881/serializing-to-json-in-jquery) – Wolph

+0

कौन सा पुस्तकालय में एक विकृत JSON स्ट्रिंग की उम्मीद है? :/ –

+0

स्टैनफोर्ड जावास्क्रिप्ट क्रिप्टोग्राफी लाइब्रेरी आउटपुट और पार्स खराब जेएसओएन, इस समय बग काम किया जाता है। – Incognito

उत्तर

84

संपादित करें: आपको नीचे दिए गए कोड को लागू करने के बजाय डगलस क्रॉकफ़ोर्ड से 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) लाइब्रेरी की अनुशंसा करता हूं, क्योंकि यह कुछ प्रकारों को ठीक से संभाल नहीं करता है, जैसे 'अपरिभाषित', फ़ंक्शंस, (जो वैध JSON मान नहीं हैं), बूलियन ऑब्जेक्ट्स (जैसे 'नया बूलियन (सत्य);'), या 'NaN' जिसे' null', आदि के साथ प्रतिस्थापित किया जाना चाहिए ... यह भी अतिरिक्त वैकल्पिक का समर्थन नहीं करता है तर्क, 'replacer' फ़ंक्शन और इंडेंटेशन के लिए 'रिक्त स्थान' संख्या, जो मानक में पूरी तरह से वर्णित हैं (http://ecma262-5.com/ELS5_HTML.htm#Section_15.12.3)। – CMS

+3

मुझे लगता है कि शायद json2 लिंक होना चाहिए: https://github.com/douglascrockford/JSON-js/blob/master/json2.js – fisherwebdev

+5

अधिकांश ब्राउज़रों में इन दिनों मूल JSON ऑब्जेक्ट होता है, जिसमें पार्स और स्ट्रिंगफ़ाई विधियां शामिल होती हैं। तो बस 'JSON.stringify ({})' आज़माएं और देखें कि क्या आपको उपरोक्त कोड को शामिल किए बिना '" {} "मिलता है। आप कुंजी को फ़िल्टर करने या सुंदर प्रिंटिंग करने के लिए पैरामीटर में भी पास कर सकते हैं, उदा। 'JSON.stringify ({ए: 1, बी: 2}, शून्य, 2) 'प्रत्येक कुंजी के सामने एक नई लाइन और 2 रिक्त स्थान रखता है। – AlexChaffee

0

आप जेएसओएन को ऑब्जेक्ट पर पार्स कर सकते हैं, फिर अपने विकृत जेएसओएन को AJavscript ऑब्जेक्ट से बना सकते हैं। यह सबसे अच्छा प्रदर्शन-वार नहीं हो सकता है, वैसे।

अन्यथा, यदि आपको केवल स्ट्रिंग में बहुत छोटे बदलाव करने की आवश्यकता है, तो बस इसे एक स्ट्रिंग के रूप में देखें, और मानक जावास्क्रिप्ट का उपयोग करके इसे उलझाएं।

39

मैं

$.param(jsonObj) 

जो मुझे स्ट्रिंग हो जाता है का उपयोग करें।

+8

लेकिन यह JSON नहीं बनाता है (और वह था प्रश्न)। –

+22

लेकिन यह छोटा कोड प्रश्न अनुरोधों के सभी शीर्षक कर रहा है: पी –

10

सबसे अच्छा तरीका है मैं पाया है उपयोग करने के लिए jQuery JSON

+2

यह एक अच्छा जवाब क्यों नहीं है? – VDP

+1

क्योंकि यह jquery _plugin_ है और जो कि jquery –

+0

@ user01 द्वारा सीधे प्रदान नहीं किया गया है, लेकिन jquery में ऐसा करने का कोई तरीका शामिल नहीं है (कम से कम यह तब नहीं हुआ जब मैंने यह उत्तर लिखा था, यह सुनिश्चित नहीं है कि यह अब करता है) –

34

अधिकतर ब्राउज़र एक देशी JSON वस्तु इन दिनों, जो parse और stringify तरीके शामिल है। तो बस 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 से:

replacer पैरामीटर या तो एक समारोह या स्ट्रिंग/नंबर की एक सरणी हो सकता है। यह JSON ऑब्जेक्ट के भीतर प्रत्येक सदस्य के माध्यम से पर कदम उठाने देता है, यह तय करने दें कि प्रत्येक सदस्य को किस मूल्य में बदला जाना चाहिए। एक समारोह के रूप में इसे वापस कर सकते हैं:

  • एक संख्या, स्ट्रिंग, या बूलियन, जो लौट आए एक के साथ संपत्ति के मूल मूल्य बदल देता है।
  • एक ऑब्जेक्ट, जिसे क्रमबद्ध किया गया है, फिर लौटा। ऑब्जेक्ट विधियों या फ़ंक्शंस की अनुमति नहीं है, और इसके बजाय हटा दिए जाते हैं।
  • नल, जो संपत्ति को हटाया जा सकता है।

एक सरणी के रूप में, मूल्यों इसके अंदर परिभाषित की JSON ऑब्जेक्ट के अंदर गुण ऐसे नाम हैं जो जब एक JSON ऑब्जेक्ट में बदल बनाए रखा जाना चाहिए से मेल खाती है।

संबंधित मुद्दे