কীভাবে JSON এ ডাবল উদ্ধৃতিগুলি রক্ষা করতে হবে


306

আমি ডাবল উদ্ধৃতিগুলি দেখানোর চেষ্টা করছি তবে এটির পিছনে একটির চিত্র দেখায়:

"maingame": {
    "day1": {
        "text1": "Tag 1",
        "text2": "Heute startet unsere Rundreise \\\"Example text\\\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.</strong> "
    }
}

এইচটিএমএলে রেন্ডার করার সময় এটি প্রদর্শিত হয় \"Example text\"। সঠিক উপায় কি?

উত্তর:


446

এটা চেষ্টা কর:

"maingame": {
  "day1": {
    "text1": "Tag 1",
     "text2": "Heute startet unsere Rundreise \" Example text\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.</strong> "
  }
}

( \উদ্ধৃতিগুলির সামনে কেবল একটি ব্যাকস্ল্যাশ ( ))।


9
@ ডাব্লুগুরু এর মন্তব্যের সাথে কিছু করার নেই, এটি বাস্তু-ইন্টারন্যাশনাল.আর . / প্রজাতন্ত্র / ফাইলস / এসিএমএএসটি / এসিএমএ-404 . pdf ( পর্ব । 9 - স্ট্রিংস) তে বর্ণিত হিসাবে একটি পালানোর ক্রম রয়েছে : All characters may be placed within the quotation marks except for the characters that must be escapedএবং তারপরে এটি নির্দিষ্ট করে:\" represents the quotation mark character (U+0022)
মাস্তাজি

কিছু কারণে, এটি জেএসে JSON.parse () এর সাথে কাজ করে না।
SacWebDeveloper

32

\\\"পরিবর্তে কখন এবং কোথায় ব্যবহার করতে হবে। ঠিক আছে আপনি যদি আমার মতো হন তবে আমি এই থ্রেডটি খুঁজে পাওয়ার পরে আমি কী করছিলাম তা বুঝতে পেরে ঠিক তেমনি নির্বোধ বোধ করবে।

আপনি যদি একটি জাসন পাঠ্য ফাইল / স্ট্রিম তৈরি করে এবং সেখান থেকে ডেটা আমদানি করে থাকেন তবে ডাবল উদ্ধৃতিগুলির আগে কেবল একটি ব্যাকস্ল্যাশের মূল স্ট্রিমের উত্তর: \"আপনি যা খুঁজছেন তা হ'ল।

তবে আপনি যদি আমার মতো হন এবং আপনি J3ON.parse (পাঠ্য) এর আউটপুটটিতে ডাবল উদ্ধৃতি পেতে w3schools.com "ট্রাইিট এডিটর" পেতে চেষ্টা করছেন তবে আপনি যেটির সন্ধান করছেন তা হ'ল ট্রিপল ব্যাকস্ল্যাশ ডাবল উদ্ধৃতি \\\"। এটি কারণ আপনি একটি HTML <script>ব্লকের মধ্যে আপনার পাঠ্য স্ট্রিংটি তৈরি করছেন এবং প্রথম ডাবল ব্যাকস্ল্যাশ একটি একক ব্যাকস্ল্যাশকে স্ট্রিং ভেরিয়েবলের মধ্যে সন্নিবেশ করায় নীচের ব্যাকস্ল্যাশ ডাবল উদ্ধৃতিটি স্ট্রিংয়ে ডাবল উদ্ধৃতি সন্নিবেশ করে যাতে ফলস্বরূপ স্ক্রিপ্টের স্ট্রিংটি এতে \"থেকে থাকে মানক উত্তর এবং জেএসএন পার্সার এটি কেবল দ্বিগুণ উদ্ধৃতি হিসাবে পার্স করবে।

<script>
  var text="{";
  text += '"quip":"\\\"If nobody is listening, then you\'re likely talking to the wrong audience.\\\""';
  text += "}";
  var obj=JSON.parse(text);
</script>

+1: যেহেতু এটি একটি জাভাস্ক্রিপ্ট পাঠ্য স্ট্রিং, তাই একটি ডাবল ব্যাকস্ল্যাশ ডাবল উদ্ধৃতিও কার্যকর \\"হবে; কারণ একক উদ্ধৃত স্ট্রিংয়ের মধ্যে ডাবল উদ্ধৃতিটি পালানোর দরকার নেই '\"'এবং '"'ফলাফল একই জেএস স্ট্রিংয়ের ফলে।


এই সমাধানটি সুইস সংস্করণটিকে একটি স্ট্রিং তৈরি করতে সহায়তা করে যা একটি JSON পোষ্টের জন্য যুক্তিতে যুক্ত হয়েছে।
নিক এন

18

এটি ব্যাকস্ল্যাশ দেখাচ্ছে কারণ আপনিও ব্যাকস্ল্যাশ থেকে বাঁচছেন।

ডাবল উদ্ধৃতি ছাড়াও, আপনি যদি আপনার জেএসওএন উদ্ধৃত স্ট্রিংয়ের মধ্যে একটি অন্তর্ভুক্ত করতে চান তবে আপনাকে অবশ্যই ব্যাকস্ল্যাশগুলি থেকে বাঁচতে হবে। তবে যদি আপনি একটি পালানোর ক্রমটিতে একটি ব্যাকস্ল্যাশ ব্যবহার করতে চান তবে স্পষ্টতই আপনি এটি এড়ানো উচিত নয়।


9

মনে রাখবেন যে বিষয়বস্তুটি "ডাবল এনকোডড" হয়ে থাকে যার অর্থ এনকোডিং অ্যালগরিদম দুর্ঘটনাক্রমে দু'বার কল করা হয়েছিল।

প্রথম কলটি "পাঠ্য 2" মানটি এনকোড করবে:

FROM: হিউট স্টারেটেট আনসার রেন্ড্রেইস "উদাহরণ পাঠ্য"। জেদেন ট্যাগ উইড ইইন নেউস রিসিজিল অ্যানজেস্টিউয়ার্ট বিস ওয়ির।

TO: হিউট স্টারেটেট আনসারির রন্ড্রেইস \ "উদাহরণ পাঠ্য \"। জেদেন ট্যাগ উইড ইইন নেউস রিসিজিল অ্যানজেস্টিউয়ার্ট বিস ওয়ির।

একটি দ্বিতীয় এনকোডিং এরপরে পুনরায় রূপান্তর করে ইতিমধ্যে পালানো অক্ষরগুলি রক্ষা করে:

FROM: হিউট স্টারেটেট আনসার রেন্ড্রেইস \ "উদাহরণ পাঠ্য \"। জেদেন ট্যাগ উইড ইইন নেউস রিসিজিল অ্যানজেস্টিউয়ার্ট বিস ওয়ির।

TO: হিউট স্টারেটেট আনসারির রন্ড্রেইস \\\ "উদাহরণ পাঠ্য \\\"। জেদেন ট্যাগ উইড ইইন নেউস রিসিজিল অ্যানজেস্টিউয়ার্ট বিস ওয়ির।

সুতরাং, আপনি যদি এখানে সার্ভার প্রয়োগের জন্য দায়বদ্ধ হন তবে একই বিষয়বস্তুটিকে এনকোড করার চেষ্টা করার দুটি পদক্ষেপ নেই কিনা তা পরীক্ষা করে দেখুন।


6
আমি বিশ্বাস করি যে এনকোডার এছাড়াও পালাবার সুইচ অব্যাহতি হবে তাই আমি মনে করি আপনার দ্বিতীয় তারিখ: পড়া উচিত: "Heute startet unsere Rundreise \\\" উদাহরণ টেক্সট \\\ "jeden ট্যাগ wird EIN neues Reiseziel angesteuert পুনর্বার
জনাথন মি

1
@ জোনাথন মী: আপনার পরামর্শ অনুসারে সবেমাত্র উত্তরটি সম্পাদনা করেছেন। এটি তাত্ত্বিকভাবে 3 টি ব্যাকস্ল্যাশ সহ সঠিকভাবে লেখা হয়েছিল, তবে স্ট্যাকওভারফ্লো উদ্ধৃতকরণের জন্য ব্যাকস্ল্যাশ ব্যবহার করে এবং 1 ম ব্যাকস্ল্যাশকে একক ব্যাকস্ল্যাশে রূপান্তরিত করে
হুহা

5

আপনি যদি JSON এ ডাবল উদ্ধৃতি থেকে বাঁচতে চান তবে এটি থেকে বাঁচতে ব্যবহার করুন।

উদাহরণস্বরূপ যদি আপনি নিম্নলিখিত জাভাস্ক্রিপ্ট অবজেক্টের জসন তৈরি করতে চান

{time: '7 "o" clock'}

তারপরে আপনাকে অবশ্যই নিম্নলিখিত পদ্ধতিতে লিখতে হবে

'{"time":"7 \\"o\\" clock"}'

যদি আমরা এটি ব্যবহার করে পার্স করি JSON.parse()

JSON.parse('{"time":"7 \\"o\\" clock"}')

ফলাফল হবে

{time: "7 "o" clock"}

1

JSON ডেটার জন্য সমস্যার কারণ হিসাবে ব্যাকস্ল্যাশগুলি এড়াতে আমি এই ফাংশনটি ব্যবহার করি।

//escape backslash to avoid errors
var escapeJSON = function(str) {
    return str.replace(/\\/g,'\\');
};

6
আমি প্রোগ্রামারদের সামগ্রীটি মুছে ফেলার (বা "ক্লিনিজিং") এর পরিবর্তে সামগ্রীটি এনকোড করতে উত্সাহিত করব। "মুছে ফেলা" ডাটাবেস ডেটা সম্পর্কে এই ধারণাটি ছিল - বিশেষত একক উদ্ধৃতি (') মুছে ফেলা। প্রোগ্রামাররা বুঝতে পারেনি যে লোকেরা তাদের নিজস্ব নাম (ওডল) ব্যবহার করতে পারে না। আমি আশা করি আজকের প্রোগ্রামাররা ডেটা ফেলা বা ছাড়াই বা ছাড়াই ছাড়াই মূল উপকরণটি ডাটাবেসে আনার জন্য অন্যান্য উপায় ব্যবহার করে।
ড্যানবেকার

ঠিক আছে, আমি জনগণকে সন্তুষ্ট করার জন্য চরিত্রটি প্রত্যাহারের অংশটি সরিয়েছি। @ ড্যানবেকার মনে রাখবেন অক্ষরগুলির পাঠ্য উত্তোলন কেবল ক্লায়েন্ট অ্যাপে জেএসকে নিরাপদ করার একমাত্র উপায় হতে পারে। কৌণিক এই কারণে এইচটিএমএল আউটপুট ডিফল্টরূপে স্যানিটাইজ করে।
এমবোকিল

আমি 100% সম্মত হই যে এমন অনেক সময় আছে যেগুলি ডেটা স্যানিটাইজ করতে হয় ... এবং এক্সএসএস সেই সময়ের মধ্যে একটি। যে এক আউট নির্দেশ করার জন্য আপনাকে ধন্যবাদ।
ড্যানবেকার 10:58

0

যারা বিকাশকারী পাওয়ারশেল ব্যবহার করতে চান তাদের জন্য। আপনার সেটিংসে যোগ করার জন্য এখানে লাইনগুলি রয়েছে: জসন:

"terminal.integrated.automationShell.windows": "C:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe",
"terminal.integrated.shellArgs.windows": [
    "-noe",
    "-c",
    " &{Import-Module 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\Common7\\Tools\\Microsoft.VisualStudio.DevShell.dll'; Enter-VsDevShell b7c50c8d} ",
    ],
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.