दिलचस्प पोस्ट
फ़ाइल। सेपरेटर या फाइल। सेपेटर पायथन में फ़ंक्शन से एकाधिक मानों को वापस करने का सबसे अच्छा तरीका क्या है? एक async विधि द्वारा फेंक दिया अपवाद पकड़ो ऐलोॉक इनट के बजाय नए का उपयोग करें डेटा। योग्य में एची कोर डेटा: एक इकाई के सभी उदाहरणों को हटाने का सबसे तेज़ तरीका किसी JSON स्ट्रिंग को किसी शब्दकोश में कनवर्ट कैसे करें? पूर्णांक में हेक्स और हेक्स को पूर्णांक में कनवर्ट करें जब मैं edittextview पर एंड्रॉइड पर क्लिक करता हूं तो कीबोर्ड दिखाई नहीं देता है? एंड्रॉइड: फाइल बनाने की तारीख कैसे प्राप्त करें? ऐपस्टोर के बिना आईफोन ऐप "YYYY-MM-DD HH: मिमी" को पार्स करने के दौरान गलत तारीख का समय बनाने के लिए SimpleDateFormat यदि वादा में दूसरा प्रवाह (ब्लूबर्ड) जांचें कि फ़ाइल VBA का उपयोग करते हुए मौजूद है या नहीं पॉवरहेल – बचती प्रक्रिया से बचने वाली स्ट्रिंग

मैं JSON में न्यूलाइन कैसे प्रबंधित करूं?

मैंने कुछ JSON जेनरेट किया है और मैं इसे जावास्क्रिप्ट में ऑब्जेक्ट में खींचने का प्रयास कर रहा हूं। मैं त्रुटियों को जारी रखता हूं यहां मेरे पास क्या है:

var data = '{"count" : 1, "stack" : "sometext\n\n"}'; var dataObj = eval('('+data+')'); 

यह मुझे एक त्रुटि देता है:

 unterminated string literal 

JSON.parse(data) , मैं समान त्रुटि संदेश देखता हूं: " Unexpected token ↵ " क्रोम में, और फ़ायरफ़ॉक्स और आईई में " unterminated string literal "

जब मैं कुछ समय बाद \n sometext तो दोनों ही मामलों में त्रुटि दूर हो जाती है। मुझे यह समझने में प्रतीत नहीं हो सकता है कि क्यों \n eval और JSON.parse विफल करता है।

Solutions Collecting From Web of "मैं JSON में न्यूलाइन कैसे प्रबंधित करूं?"

मुझे लगता है कि आप यही चाहते हैं:

 var data = '{"count" : 1, "stack" : "sometext\\n\\n"}'; 

(आपको अपने स्ट्रिंग में "\" से बचने की जरूरत है (इसे दोहरे – "\" में बदलकर), अन्यथा यह JSON स्रोत में एक नई पंक्ति बन जाएगी, JSON डेटा नहीं।)

आपको एक फ़ंक्शन की आवश्यकता होगी जो कि \n को \\n जगह लेती है, यदि data स्ट्रिंग का शाब्दिक नहीं है

 function jsonEscape(str) { return str.replace(/\n/g, "\\\\n").replace(/\r/g, "\\\\r").replace(/\t/g, "\\\\t"); } var data = '{"count" : 1, "stack" : "sometext\n\n"}'; var dataObj = JSON.parse(jsonEscape(data)); 

परिणाम dataObj होगा

 Object {count: 1, stack: "sometext\n\n"} 

आप स्ट्रिंग से बचने के लिए इस C # फंक्शन में देखना चाह सकते हैं:

http://www.aspcode.net/C-encode-a-string-for-JSON-JavaScript.aspx

 public static string Enquote(string s) { if (s == null || s.Length == 0) { return "\"\""; } char c; int i; int len = s.Length; StringBuilder sb = new StringBuilder(len + 4); string t; sb.Append('"'); for (i = 0; i < len; i += 1) { c = s[i]; if ((c == '\\') || (c == '"') || (c == '>')) { sb.Append('\\'); sb.Append(c); } else if (c == '\b') sb.Append("\\b"); else if (c == '\t') sb.Append("\\t"); else if (c == '\n') sb.Append("\\n"); else if (c == '\f') sb.Append("\\f"); else if (c == '\r') sb.Append("\\r"); else { if (c < ' ') { //t = "000" + Integer.toHexString(c); string t = new string(c,1); t = "000" + int.Parse(tmp,System.Globalization.NumberStyles.HexNumber); sb.Append("\\u" + t.Substring(t.Length - 4)); } else { sb.Append(c); } } } sb.Append('"'); return sb.ToString(); } 

नमस्ते, मैं JSON डेटा को पार्स करने के लिए डेटा में न्यूलाइन या अन्य वर्णों को पट्टी करने के लिए इस फ़ंक्शन का इस्तेमाल किया:

 function normalize_str($str) { $invalid = array('Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r', "`" => "'", "´" => "'", '"' => ',', '`' => "'", '´' => "'", '"' => '\"', '"' => "\"", '´' => "'", "&acirc;€™" => "'", "{" => "", "~" => "", "–" => "-", "'" => "'"," " => " "); $str = str_replace(array_keys($invalid), array_values($invalid), $str); $remove = array("\n", "\r\n", "\r"); $str = str_replace($remove, "\\n", trim($str)); //$str = htmlentities($str,ENT_QUOTES); return htmlspecialchars($str); } echo normalize_str($lst['address']); 

उदाहरण के लिए, आप क्लाइंट ब्राउज़र में मान को पुनः प्राप्त करते समय जेएसन फ़ील्ड के मान लिखते समय इसे अनदेखी करते समय सर्वर में अपनी स्ट्रिंग से बच सकते थे।

सभी प्रमुख ब्राउज़र के जावास्क्रिप्ट कार्यान्वयन में यूनेशस्क कमांड है

उदाहरण: सर्वर में:

 response.write "{""field1"":""" & escape(RS_Temp("textField")) & """}" 

ब्राउज़र में:

 document.getElementById("text1").value = unescape(jsonObject.field1) 

युक्ति के अनुसार: http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf

 A string is a sequence of Unicode code points wrapped with quotation marks (U+0022). All characters may be placed within the quotation marks except for the characters that must be escaped: quotation mark (U+0022), reverse solidus (U+005C), and the control characters U+0000 to U+001F. There are two-character escape sequence representations of some characters. 

तो आप सीधे 0x0A या 0x0C कोड पास नहीं कर सकते यह निषिद्ध है! युक्ति U+0000 से U+001F के कुछ अच्छी तरह से परिभाषित कोडों के लिए एस्केप अनुक्रमों का उपयोग करने का सुझाव देते हैं:

 \f represents the form feed character (U+000C). \n represents the line feed character (U+000A). 

चूंकि अधिकांश प्रोग्रामिंग भाषा इसका इस्तेमाल करते हुए उद्धृत करने के लिए उपयोग करते हैं, इसलिए बचें सिंटैक्स से बचें (दो बार भागने – एक बार भाषा / प्लेटफ़ॉर्म के लिए, एक बार जेसनसन के लिए):

 jsonStr = "{ \"name\": \"Multi\\nline.\" }"; 

मुझे json_encode (PHP5 में उपलब्ध) का अनुकरण करने के लिए PHP4 में एक वर्ग बनाते समय उस समस्या का सामना करना पड़ा। मैं यहाँ किस प्रकार आया हूं:

 class jsonResponse { var $response; function jsonResponse() { $this->response = array('isOK'=>'KO','msg'=>'Undefined'); } function set($isOK, $msg) { $this->response['isOK'] = ($isOK) ? 'OK' : 'KO'; $this->response['msg'] = htmlentities($msg); } function setData($data=null) { if(!is_null($data)) $this->response['data'] = $data; elseif(isset($this->response['data'])) unset($this->response['data']); } function send() { header('Content-type: application/json'); echo '{"isOK":"'.$this->response['isOK'].'","msg":'.$this->parseString($this->response['msg']); if(isset($this->response['data'])) echo ',"data":'.$this->parseData($this->response['data']); echo '}'; } function parseData($data) { if(is_array($data)) { $parsed = array(); foreach ($data as $key=>$value) array_push($parsed, $this->parseString($key).':'.$this->parseData($value)); return '{'.implode(',', $parsed).'}'; } else return $this->parseString($data); } function parseString($string) { $string = str_replace("\\", "\\\\", $string); $string = str_replace('/', "\\/", $string); $string = str_replace('"', "\\".'"', $string); $string = str_replace("\b", "\\b", $string); $string = str_replace("\t", "\\t", $string); $string = str_replace("\n", "\\n", $string); $string = str_replace("\f", "\\f", $string); $string = str_replace("\r", "\\r", $string); $string = str_replace("\u", "\\u", $string); return '"'.$string.'"'; } } 

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