2013-03-08 6 views
5

नोट: यह प्रश्न Embedding JSON objects in script tags के बहुत करीब है, लेकिन उस प्रश्न के जवाब जो मुझे पहले से ही पता है (जो JSON / == \/ में) प्रदान करता है। मैं जानना चाहता हूं कि बचने के लिए कैसे करें।मैं जेएसओएन में पाइथन के साथ एचटीएमएल टैग में क्लोजिंग '/' से कैसे बचूं?

एचटीएमएल स्पेक <script> तत्व के भीतर कहीं भी एचटीएमएल टैग बंद कर देता है।

<script> 
var assets = [{ 
    "asset_created": null, 
    "asset_id": "575155948f7d4c4ebccb02d4e8f84d2f", 
    "body": "<script></script>" 
}]; 
</script> 

मेरे मामले में, मैं एक Django टेम्पलेट के अंदर JSON स्ट्रिंग प्रतिपादन द्वारा अवैध स्थिति पैदा कर रहा हूँ, यानी:

<script> 
var assets = {{ json_string }}; 
</script> 

मुझे पता है कि JSON पार्स \/ तो, यह पार्स त्रुटि का कारण बनता है / जैसा ही है, इसलिए यदि मैं JSON स्ट्रिंग में अपने बंद HTML टैग से बच सकता हूं, तो मैं अच्छा होगा। लेकिन, मुझे यह करने का सबसे अच्छा तरीका नहीं है।

json_string = '[{"asset_created": null, "asset_id": "575155948f7d4c4ebccb02d4e8f84d2f", "body": "<script></script>"}]' 
escaped_json_string = json_string.replace('</', r'<\/') 

वहाँ एक बेहतर तरीका है:

मेरे अनुभवहीन दृष्टिकोण सिर्फ इस होगा? या कोई गठिया जो मैं देख रहा हूँ?

उत्तर

6

अपडेट किया गया उत्तर

ठीक है, मैं कुछ चीजें गलत तरीके से ग्रहण किया। JSON से बचने के लिए, simplejson लाइब्रेरी का उपयोग करने के लिए JSONEncoderForHTML विधि हो सकती है। यदि कोड काम नहीं करता है तो आपको इसे pip या easy_install के माध्यम से इंस्टॉल करने की आवश्यकता हो सकती है। तो फिर तुम कुछ इस तरह कर सकते हैं:

import simplejson 
asset_json=simplejson.loads(json_string) 
encoded=simplejson.encoder.JSONEncoderForHTML().encode(assets_json) 

जो encoded आप इस दे देंगे:

'{"asset_id": "575155948f7d4c4ebccb02d4e8f84d2f", "body": "\\u003cscript\\u003e\\u003c/script\\u003e", "asset_created": null}' 

यह स्लैश तुलना में एक अधिक समग्र समाधान की जगह के रूप में यह अन्य एन्कोडिंग चेतावनियां रूप में अच्छी तरह संभालती है।

loads भाग जेएसओएन पहले ही एन्कोड किए जाने का दुष्प्रभाव है।

simplejson.dumps(your_object_to_encode, cls=simplejson.encoder.JSONEncoderForHTML) 

ओल्ड उत्तर

CDATA में अपनी स्क्रिप्ट लपेटकर का प्रयास करें::

<script> 
//<![CDATA[ 
var assets = [{ 
    "asset_created": null, 
    "asset_id": "575155948f7d4c4ebccb02d4e8f84d2f", 
    "body": "<script></script>" 
}]; 
//]]> 
</script> 

यह मतलब है यह Django का उपयोग नहीं करता है, तो संभव JSON उत्पन्न करने के लिए और बदले simplejson का उपयोग करके बचा जा सकता है इस तरह की चीज़ पर पार्सर को ध्वजांकित करने के लिए। अन्यथा आपको वर्णित वर्ण से बचने की आवश्यकता होगी।

+0

लेकिन यह केवल एक्सएचटीएमएल के लिए काम करता है, है ना? '' '', '' CDATA' के साथ काम नहीं लग रहा है। यही कारण है कि मैंने JSON में ''\ /' 'से बचने को प्राथमिकता दी। प्रश्न पाठ से बचने के तरीके से बचने के लिए स्ट्रिंग प्रतिस्थापन को कैसे करें, इस बारे में अधिक जानकारी थी। –

+0

@ गेफ्रीहिंग आह हाँ मैंने गलत तरीके से एक्सएचटीएमएल भाग ग्रहण किया। मैंने डीजेंगो भागने के भाग के लिए अपना जवाब अपडेट कर लिया है। – cwgem

+1

@ गेफ्रीहिंग: डीजेंगो जहाजों की अपनी प्रतिलिपि सरलजसन के साथ है जिसे आप 'django.utils आयात simplejson' से आयात करके आयात कर सकते हैं ताकि आपको इसे अलग से इंस्टॉल करने की आवश्यकता न हो। –

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