2010-02-13 16 views
58

मैं Google विज़ुअलाइज़ेशन के साथ आलेख बनाने के लिए जेएस ऑब्जेक्ट का उपयोग कर रहा हूं। मैं डेटा स्रोत डिजाइन करने की कोशिश कर रहा हूं। सबसे पहले, मैंने एक जेएस ऑब्जेक्ट क्लाइंट-साइड बनाया।JSON स्ट्रिंग जेएस ऑब्जेक्ट

var JSONObject = { 
    cols: [{id: 'date', label: 'Date', type: 'date'}, 
{id: 'soldpencils', label: 'Sold Pencils', type: 'number'}, 
     {id: 'soldpens', label: 'Sold Pens', type: 'number'}], 
    rows: [{c:[{v: new Date(2008,1,1),f:'2/1/2008'},{v: 30000}, {v: 40645}]}, 
     {c:[{v: new Date(2008,1,2),f:'2/2/2008'},{v: 14045}, {v: 20374}]}, 
    {c:[{v: new Date(2008,1,3),f:'2/3/2008'},{v: 55022}, {v: 50766}]}] 
}; 

var data = new google.visualization.DataTable(JSONObject, 0.5); 

अब मुझे डेटा गतिशील रूप से लाने की आवश्यकता है।

var var1 = "cols: [{i ....... 66}]}" 

और के रूप में

alert(var1); 

अब मेरी काम है शो:

"cols: [{id: 'date', label: 'Date', type: 'date'}, 
{id: 'soldpencils', label: 'Sold Pencils', type: 'number'}, 
{id: 'soldpens', label: 'Sold Pens', type: 'number'}], 
    rows: [{c:[{v: new Date(2008,1,1),f:'2/1/2008'},{v: 30000}, {v: 40645}]}, 
     {c:[{v: new Date(2008,1,2),f:'2/2/2008'},{v: 14045}, {v: 20374}]}, 
{c:[{v: new Date(2008,1,3),f:'2/3/2008'},{v: 55022}, {v: 50766}]}" 

यह मैं एक चर में बचाने: तो मैं उस पृष्ठ JSON स्ट्रिंग रिटर्न के लिए एक AJAX अनुरोध भेजने इस स्ट्रिंग से जेएस ऑब्जेक्ट बनाने के लिए। ये काम नहीं कर रहा है। जब मैं जेएस ऑब्जेक्ट का उपयोग करता हूं, तो सब ठीक काम करता है और मैं अपना आवश्यक ग्राफ प्राप्त करने में सक्षम हूं। अब अगर मैं AJAX अनुरोध से स्ट्रिंग का वही मान डालने का प्रयास करता हूं जिसे मैंने एक ऑब्जेक्ट में एक चेतावनी संदेश से पुष्टि की है, तो ऑब्जेक्ट सही ढंग से नहीं बनाया जा रहा है। कृपया मुझे अपनी राय और कोई सुधार या सलाह दें।

+1

जेसन ऑब्जेक्ट को स्ट्रिंग प्राप्त करने के लिए जावास्क्रिप्ट 'eval (json_string) 'विधि का उपयोग करें। हालांकि चेतावनी दी जानी चाहिए, वही कार्य संभावित रूप से खतरनाक हो सकता है क्योंकि यह स्क्रिप्ट निष्पादित भी कर सकता है। –

+1

केवल एक एफवाईआई - कुंजी नाम और तार ** ** ** वैध JSON में '' '' के अंदर होना चाहिए: http://simonwillison.net/2006/Oct/11/json/ – gnarf

+0

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

उत्तर

118

कुछ आधुनिक ब्राउज़रों एक देशी वस्तु में JSON को पार्स के लिए समर्थन:

var var1 = '{"cols": [{"i" ....... 66}]}'; 
var result = JSON.parse(var1); 

ब्राउज़रों कि इसका समर्थन नहीं करते के लिए, आप एक के सुरक्षित पार्सिंग के लिए json.org से json2.js डाउनलोड कर सकते हैं JSON ऑब्जेक्ट। स्क्रिप्ट देशी JSON समर्थन की जांच करेगी और यदि यह अस्तित्व में नहीं है, तो इसके बजाय JSON वैश्विक ऑब्जेक्ट प्रदान करें। यदि तेज़, मूल वस्तु उपलब्ध है तो यह केवल स्क्रिप्ट को छोड़कर स्क्रिप्ट से बाहर निकल जाएगी। हालांकि, आपको वैध JSON प्रदान करना होगा या यह — त्रुटि को फेंक देगा, आप http://jslint.com या http://jsonlint.com के साथ अपने JSON की वैधता की जांच कर सकते हैं।

+4

प्रासंगिक: http://caniuse.com/json – JamesHalsall

5

यदि आप स्ट्रिंग में डेटा पर भरोसा करते हैं तो आप eval (jsonString) का उपयोग कर सकते हैं, अन्यथा आपको इसे सही तरीके से पार्स करने की आवश्यकता होगी - कुछ कोड नमूने के लिए json.org देखें।

+1

क्या मैं सामग्री से भरोसा कर सकता हूं एक बड़ी वेबसाइट की एपीआई (रेडडिट)? –

3

आप JSON.org से this library का उपयोग अपनी स्ट्रिंग को JSON ऑब्जेक्ट में अनुवाद करने के लिए कर सकते हैं।

var var1_obj = JSON.parse(var1); 

या आप के रूप में अच्छी jquery-json लाइब्रेरी का उपयोग कर सकते हैं।

var var1_obj = $.toJSON(var1); 
5

आपके प्रश्न में स्ट्रिंग एक वैध जेसन स्ट्रिंग नहीं है। json.org website से:

JSON दो संरचनाओं पर बनाया गया है:

* A collection of name/value pairs. In various languages, this is 
    realized as an object, record, struct, dictionary, hash table, keyed list, or 
    associative array. 
* An ordered list of values. In most languages, this is realized as an 
    array, vector, list, or sequence. 

मूल रूप से एक json स्ट्रिंग हमेशा साथ या तो {या [शुरू कर देंगे।

तब @ एंडी ई और @ क्रियो ने कहा कि आप json2.js या कुछ अन्य पुस्तकालयों के साथ स्ट्रिंग को पार्स कर सकते हैं।

IMHO आपको eval से बचना चाहिए क्योंकि यह कोई जावास्क्रिप्ट प्रोग्राम होगा, इसलिए आप सुरक्षा समस्याओं में पड़ सकते हैं।

3

जो स्ट्रिंग आप लौट रहे हैं वह वैध JSON नहीं है। ऑब्जेक्ट्स में नामों को उद्धृत करने की आवश्यकता है और ऑब्जेक्ट बनाने के लिए पूरे स्ट्रिंग को { … } में रखा जाना चाहिए।JSON में new Date() जैसे कुछ भी शामिल नहीं हो सकता है। JSON केवल जावास्क्रिप्ट का एक छोटा सबसेट है जिसमें केवल तार, संख्याएं, ऑब्जेक्ट्स, सरणी, true, false और null हैं।

अधिक जानकारी के लिए JSON grammar देखें।

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