জেএসএন স্ট্রিং তৈরিতে বিশেষ অক্ষরগুলি কীভাবে পালানো যায়?


200

এখানে আমার স্ট্রিং

{
    'user': {
        'name': 'abc',
        'fx': {
            'message': {
                'color': 'red'
            },
            'user': {
                'color': 'blue'
            }
        }
    },
    'timestamp': '2013-10-04T08: 10: 41+0100',
    'message': 'I'mABC..',
    'nanotime': '19993363098581330'
}    

এখানে বার্তায় একক উদ্ধৃতি চিহ্ন রয়েছে, যা জেএসএনে ব্যবহৃত উদ্ধৃতি হিসাবে একই। আমি যা করি তা হ'ল বার্তা হিসাবে ব্যবহারকারীর ইনপুট থেকে একটি স্ট্রিং পূরণ করা। সুতরাং, কোডটি ভেঙে দেয় এমন বিশেষ পরিস্থিতিতে আমার পালাতে হবে। তবে স্ট্রিং প্রতিস্থাপন ব্যতীত, তাদের পালানোর কোনও উপায় কি তবে এখনও এইচটিএমএলকে সঠিক বার্তায় ফিরে প্রক্রিয়া করার অনুমতি দেবে?


45
জেএসএন কেবলমাত্র ডাবল উদ্ধৃতিগুলি ব্যবহার করে, একক উদ্ধৃতি নয়, json.org দেখুন
নীলস বম

4
আরএফসি 4627 বলেছে যে পার্সাররা অবশ্যই জেএসএন (অনুচ্ছেদ 4) কে পার্স করতে সক্ষম হবে এবং অতিরিক্ত নন-জেএসওএন এক্সটেনশনগুলিকে সমর্থন করতে পারে। তবে, অনুচ্ছেদে 5 অনুচ্ছেদে জোর দিয়ে বলা হয়েছে যে সমস্ত প্রযোজক (জেনারেটর) কেবলমাত্র 100% অনুগত জেএসএন উত্পাদন করতে পারে। ফ্রেম অক্ষরগুলির সাথে জেএসএন উত্পাদন করা যা পালানোর প্রয়োজন হয় না এটি একটি বিশেষত খারাপ ধারণা। অনুগ্রহ করে আপনার এস্ট্রোফেরসগুলি প্রতিস্থাপনের বিষয়টি বিবেচনা করুন। ietf.org/rfc/rfc4627.txt
Luv2code

3
@ Luv2code আপনি যে পয়েন্টগুলি তৈরি করছেন তা সত্যই রয়ে গেছে, তবে মনে রাখবেন যে আপনি একটি অপ্রচলিত বিশেষকে উদ্ধৃত করছেন iting আরএফসিগুলি পড়ার সময়, সর্বদা টুলস.ইটিএফ.আর.গ্রাফিকেশন / সংস্করণ ব্যবহার করুন , পাঠ্য সংস্করণ নয় text এইচটিএমএল সংস্করণগুলি পড়তে সহজ হয় এবং এর সাব-বিভাগগুলিতে লিঙ্ক করা যায় এবং সবচেয়ে গুরুত্বপূর্ণ, এইচটিএমএল সংস্করণগুলির শীর্ষে সমস্ত পরবর্তী আরএফসিগুলির একটি তালিকা রয়েছে যা আপনি পড়ছেন তা আপডেট বা অপ্রচলিত। আপনি যদি সরঞ্জামগুলিতে চলে যান ietietf.org/html/rfc4627 আপনি দেখতে পেয়েছেন যে আরএফসি 4627 অপ্রচলিত এবং আরএফসি 7159 দ্বারা প্রতিস্থাপিত হয়েছে ।
মার্ক আমেরিকা

3
ভবিষ্যতে এই পড়া মানুষের জন্য, জন্য RFC 7159 পালাক্রমে দ্বারা অবচিত হয়েছে tools.ietf.org/html/rfc8259
গুহা Boezem য়োরাম ভ্যান

উত্তর:


286

স্পেস অনুসারে একটি জেএসএন স্ট্রিং অবশ্যই ডাবল-কোটেড হওয়া উচিত , সুতরাং আপনাকে পালানোর দরকার নেই '
আপনার JSON স্ট্রিংয়ে আপনাকে যদি বিশেষ চরিত্রটি ব্যবহার করতে হয় তবে আপনি অক্ষরটি ব্যবহার করে এড়াতে পারবেন \

জেএসএনে ব্যবহৃত বিশেষ চরিত্রের এই তালিকাটি দেখুন:

\b  Backspace (ascii code 08)
\f  Form feed (ascii code 0C)
\n  New line
\r  Carriage return
\t  Tab
\"  Double quote
\\  Backslash character


যাইহোক, যদিও এটি পুরোপুরি অনুমানের বিপরীতে, লেখক ব্যবহার করতে পারেন \'

এটি খারাপ কারণ:

  • এটা চশমা বিপরীত
  • এটি আর JSON বৈধ স্ট্রিং নয়

আপনি যেমন এটি চান বা না চান তবে এটি কাজ করে।

নতুন পাঠকদের জন্য, আপনার জসন স্ট্রিংয়ের জন্য সর্বদা একটি ডাবল উদ্ধৃতি ব্যবহার করুন।


30
"একক উদ্ধৃত জসন স্ট্রিং" ? এটা অপদার্থ; JSON এ থাকা স্ট্রিংগুলি কেবল কখনও ডাবল-কোটেড হতে পারে। JSON.parse("'foo'")উদাহরণস্বরূপ, আপনার ব্রাউজার কনসোলে চেষ্টা করুন এবং দেখুন SyntaxError: Unexpected token '। জেএসএন স্পেকটি সম্পর্কে সত্যই সহজ এবং স্পষ্ট । একক উদ্ধৃতিগুলির জন্য জেএসএনে কোনও পালানোর অনুক্রম নেই এবং একটি জেএসওএন স্ট্রিং একক-উদ্ধৃতি দেওয়া যাবে না।
মার্ক আমেরিকা

15
এমনকি এই উত্তরের জন্য অনুমিতভাবে স্পষ্ট করা আপডেটটিও খারাপ। প্রযুক্তিগতভাবে সত্য হওয়া সত্ত্বেও, এটি রক্ষা করার জন্য আপনার "দরকার নেই" বলা ভুলভাবে বিভ্রান্তিকর, প্রযুক্তিগতভাবে 'ঠিক একইভাবে হলেও এটি ভ্রান্তরূপে বলা যায় যে আইনত আপনার বাচ্চাদের হত্যার দরকার নেই । আরও সঠিক বলতে গেলে আপনি পালাতে পারবেন না'\'এটি একটি অবৈধ অব্যাহতি ক্রম, এবং যদি আপনি এটি ব্যবহার করেন তবে আপনার JSON বৈধ JSON নয় এবং কোনও JSON পার্সার এতে চোক চাপিয়ে দেবে। (অবশ্যই জাভাস্ক্রিপ্ট JSON.parseএবং পাইথনের json.loadsকরণীয়))
মার্ক অ্যামেরি

2
এই সম্পাদনাটি অনেকগুলি সম্পাদনার পরেও একেবারে বাজে কথা বলে যায়। আপনার দাবি, ভুলভাবে, যে JSON এ একক-উদ্ধৃত স্ট্রিংগুলি ব্যবহার করে এবং \'অব্যাহতি ক্রমটি "আপনি যেমন চান তেমন চান না যেমন কাজ করে" ব্যবহার করে । এটা মিথ্যা। আমি আপনাকে চ্যালেঞ্জ জানালাম যে কোনও জনপ্রিয় JSON পার্সারকে জনপ্রিয় ব্যবহারে প্রদর্শন করুন যা একক-উদ্ধৃত স্ট্রিং বা \'ক্রম অনুসারে শ্বাসরোধ করবে না । আমি ইতিমধ্যে এটি JSON.parse("'foo'")এবং JSON.parse('"\\\'"') (জাভাস্ক্রিপ্টে) এবং json.loads("'foo'")এবং json.loads('"\\\'"')(পাইথনে) উভয়ই ব্যতিক্রম ছুঁড়ে ফেলেছি pointed এই কন্সট্রাক্টসগুলি "কাজ" ব্যবহার করে যে দাবি করার জন্য পৃথিবীতে আপনার ভিত্তি কী ?
মার্ক আমেরিকা

10
@ Luv2code আকর্ষণীয় উক্তি। আপনি এটিকে কিছুটা ভুল ব্যাখ্যা করছেন; এর অর্থ এই নয় যে কোনও চরিত্রকে সামনে রেখে ব্যাকস্ল্যাশ রেখে কেবল পালানো যায়। একটি পূর্ণাঙ্গ কোট "কোন চরিত্র পলান হতে পারে। চরিত্র বেসিক বহুভাষিক প্লেন (ইউ + + 0000 U + এ FFFF মাধ্যমে), তাহলে এটি একটি হিসাবে প্রতিনিধিত্ব করা যেতে পারে থাকে ছয়-অক্ষর ক্রম । ... অথবা, দুই আছে -চক্রাক্টর সিকোয়েন্স কিছু জনপ্রিয় চরিত্রের উপস্থাপনা। "(জোর দেওয়া খনি)। এটা বলার অপেক্ষা রাখে আপনি এড়িয়ে যেতে পারে 'যেমন \u0027, না আপনি এটি যেমন বাঁচা যায় \'
মার্ক আমেরিকা

2
@ Luv2code এখনও, এর অর্থ এই যে আমার আপত্তিযুক্ত মন্তব্য করে যে "আপনি পালাতে পারবেন না '" (এবং শিশুদের হত্যার সাথে এই জাতীয় আচরণের তুলনা করুন) প্রযুক্তিগতভাবে ভুল; আরও সঠিক বলতে গেলে আপনি এড়াতে পারবেন, ঠিক তেমন নয় \'। আমি বুঝতে পারি নি যে \u0027বর্ণের আরএফসি সংস্করণটি তারা যে চরিত্রগুলি উপস্থাপন করে তাদের 'পালানোর' উপায় হিসাবে সিকোয়েন্সগুলিতে উল্লেখ করেছে । মূল বিষয়টি যে \'অবৈধ, যদিও এটি এখনও সত্য এবং গুরুত্বপূর্ণ।
মার্ক আমেরিকা

361

একটি মৌলিক বিষয় সম্পর্কে এই জাতীয় উচ্চ-দেখা প্রশ্নের উপর উচ্চ-উত্সাহিত ভুল তথ্য উপস্থিতির কারণে আমি হতবাক হয়েছি।

JSON স্ট্রিং একক উদ্ধৃতি দিয়ে উদ্ধৃত করা যাবে না । বৈশিষ্টটির বিভিন্ন সংস্করণ ( ডগলাস ক্রকফোর্ডের মূল , ইসিএমএ সংস্করণ এবং আইইটিএফ সংস্করণ ) সমস্ত স্ট্রিংয়ে স্ট্রিংগুলি অবশ্যই ডাবল কোট দিয়ে উদ্ধৃত করা উচিত। এটি কোনও তাত্ত্বিক সমস্যা নয় বা গৃহীত উত্তর হিসাবে বর্তমানে মতামতের বিষয় নয়; আপনি যদি একটি একক-উদ্ধৃত স্ট্রিংটিকে পার্স করার চেষ্টা করেন তবে আসল বিশ্বের কোনও জেএসএন পার্সার ত্রুটিযুক্ত হয়ে যাবে।

ক্রকফোর্ড এবং ইসিএমএর সংস্করণ এমনকি একটি সুন্দর ছবি ব্যবহার করে একটি স্ট্রিংয়ের সংজ্ঞা প্রদর্শন করে, যা বিষয়টিকে দ্ব্যর্থহীনভাবে পরিষ্কার করে তুলবে:

ছবিটি JSON অনুমান থেকে একটি স্ট্রিংয়ের সংজ্ঞা দেখাচ্ছে

সুন্দর ছবিটি একটি JSON স্ট্রিংয়ের মধ্যে বৈধ অব্যাহতি সিকুয়েন্সগুলিরও সমস্ত তালিকাবদ্ধ করে:

  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u ফোর-হেক্স-অঙ্কের পরে

মনে রাখবেন, এখানে অন্য কয়েকটি উত্তরের বোকা বিপরীতে, \'কখনও JSON স্ট্রিংয়ে কোনও বৈধ পালানোর অনুক্রম নয়। এটি হওয়ার দরকার নেই, কারণ JSON স্ট্রিংগুলি সর্বদা ডাবল-কোটেড থাকে।

শেষ অবধি, প্রগতিগতভাবে JSON উত্পন্ন করার সময় আপনার নিজের চরিত্রগুলি থেকে বাঁচার বিষয়ে সাধারণত চিন্তা করা উচিত নয় (যদিও অবশ্যই আপনি ম্যানুয়ালি সম্পাদনা করার সময় বলবেন, একটি JSON- ভিত্তিক কনফিগারেশন ফাইল থাকবে)। পরিবর্তে, আপনার ভাষা যে জাতীয় নেভিগেশন মানচিত্র, অ্যারে, স্ট্রিং, সংখ্যা, বুলিয়ান এবং নাল ধরন ব্যবহার করে এনকোড করতে চান সেই ডেটা স্ট্রাকচারটি তৈরি করুন এবং তারপরে JSON-encoding ফাংশন সহ এটি JSON এ এনকোড করুন। এই জাতীয় ফাংশন সম্ভবত আপনি জাভাস্ক্রিপ্ট JSON.stringify, পিএইচপি json_encodeবা পাইথনের মতো যে কোনও ভাষা ব্যবহার করছেন intojson.dumps। যদি আপনি এমন কোনও ভাষা ব্যবহার করছেন যা এর মধ্যে যেমন কার্যকরীতা অন্তর্নির্মিত না থাকে তবে আপনি সম্ভবত কোনও JSON পার্সিং এবং এনকোডিং লাইব্রেরিটি ব্যবহার করতে পারেন। আপনি যদি JSON এ এবং থেকে জিনিসগুলিকে রূপান্তর করতে কেবল ভাষা বা গ্রন্থাগার ফাংশন ব্যবহার করেন তবে আপনাকে জেএসওনের পালানোর নিয়মগুলি কখনও জানতে হবে না। এখানে বিভ্রান্ত প্রশ্নোত্তরকারীকে করা উচিত ছিল।


4 হেক্স বাইট বা নিবলস ?
লেটব্যাকুন

36

প্রত্যেকে কীভাবে 'একটি 'উদ্ধৃত স্ট্রিং আক্ষরিক মধ্যে পালাতে হবে সে সম্পর্কে কথা বলছে । এখানে আরও অনেক বড় সমস্যা রয়েছে: একক-উদ্ধৃত স্ট্রিং লিটারালগুলি বৈধ JSON নয় । জেএসএন জাভাস্ক্রিপ্ট ভিত্তিক, তবে এটি একই জিনিস নয়। আপনি যদি জাভাস্ক্রিপ্ট কোডের অভ্যন্তরে কোনও বস্তু আক্ষরিক লিখছেন, ঠিক আছে; আপনার যদি আসলে জেএসএন দরকার হয় তবে আপনার ব্যবহার করা উচিত "

ডাবল-কোটেড স্ট্রিং সহ, আপনাকে এড়িয়ে যাওয়ার দরকার হবে না '। (এবং আপনি যদি "স্ট্রিংটিতে আক্ষরিক চান , আপনি ব্যবহার করতে পারেন \"))


1
হাই, আপনি ডাবল-কোটেড স্ট্রিং দিয়ে বলেছেন, আপনাকে এড়িয়ে যাওয়ার দরকার হবে না '। শত্রুর উদাহরণ যদি আমার স্ট্রিংয়ের মান হয় তবে "Member's_id" : 4আপনি কি বলছেন যে এটির পালানোর দরকার নেই? স্পষ্টতই আমার একটি সমস্যা হচ্ছে যেখানে এটি ভুল এনকোডিংয়ের একটি ত্রুটি দিচ্ছে: ইউটিএফ -8 এবং এটি পড়ছে Member�s। এটি একটি ম্যানুয়ালি উত্পাদিত জেসন ফাইল।
শুভম

1
'একটি JSON স্ট্রিংয়ে আক্ষরিক অবশ্যই এড়াতে হবে না। আপনি কোথাও থেকে এটি অনুলিপি করেছেন? সম্ভবত এটি সত্যিই একটি \u2019, অ্যাডাস্ট্রোফ নয়। আমার অনুমান: কেউ এটিকে এমএস ওয়ার্ডে টাইপ করেছেন, যা এটিকে একটি উদ্ধৃতি চিহ্নে রূপান্তরিত করেছে কারণ এটি মনে করে যে এটি সবচেয়ে ভাল জানেন। ব্যাকরণগতভাবে, ভাল পুরানো এএসসিআইআই চরিত্রের অ্যাডাস্ট্রোফ ( ', ওরফে \x27, যা আমরা এখন অবধি "একক উদ্ধৃতি" হিসাবে ডাকছি) আপনি চাইছেন is তবে আপনার চরিত্রের এনকোডিংয়ের সমস্যাটি ঠিক করার পরেও দুর্দান্ত লাগবে, যদি অনুরূপ অন্যান্য সমস্যা আছে। সুতরাং একটি অক্ষর এনকোডিং চয়ন করুন, এবং এটি পড়ার এবং লেখার উভয়ের জন্য ব্যবহার করুন। অথবা ব্যবহার করে পালাতে পারেন \u
ডেভিড নিপ

7

এই উত্তরগুলির বেশিরভাগই প্রশ্নের উত্তর দেয় না বা অযৌক্তিকভাবে দীর্ঘায়িত হয়।

ঠিক আছে সুতরাং জেএসএন কেবলমাত্র ডাবল উদ্ধৃতি চিহ্ন ব্যবহার করে, আমরা এটি পাই!

আমি সার্ভারে জেএসএন ডেটা পোস্ট করার জন্য এবং পরে সেই একই তথ্যটি ফিরিয়ে দিতে JQuery AJAX ব্যবহার করার চেষ্টা করছিলাম। আমি যে পোস্ট করা প্রশ্নের সন্ধান পেয়েছি তার সর্বোত্তম সমাধানটি হ'ল:

var d = {
    name: 'whatever',
    address: 'whatever',
    DOB: '01/01/2001'
}
$.ajax({
    type: "POST",
    url: 'some/url',
    dataType: 'json',
    data: JSON.stringify(d),
    ...
}

এটি আপনার জন্য অক্ষরগুলি এড়িয়ে যাবে।

এটি মার্ক অ্যামেরি, দুর্দান্ত উত্তর বিটিডাব্লু দ্বারাও পরামর্শ দেওয়া হয়েছিল

আশা করি এটি কাউকে সাহায্য করবে।


0

আমি পার্টিতে খুব দেরী হতে পারি তবে এটি একক উক্তি পার্স / পলায়ন করবে (পার্স বনাম পালানোর লড়াইয়ে নামতে চাই না) ..

JSON.parse("\"'\"")

0

প্রত্যক্ষ প্রশ্নের উত্তর দিন:
নিরাপদ থাকতে প্রয়োজনীয় অক্ষরটিকে \ u + 4-ডিজিট-হেক্স-মান দিয়ে প্রতিস্থাপন করুন

উদাহরণ: আপনি যদি অ্যাডাস্ট্রোফের হাতছাড়া করতে চান তবে প্রতিস্থাপন করুন 27 u0027
অ্যাডোস্ট্রোফ থেকে ডি'আমিকো ডি \ u0027 অ্যামিকো হয়ে যায়

নিস রেফারেন্স: http://es5.github.io/x7.html#x7.8.4

https://mathiasbynens.be/notes/javascript-escapes


রেফারেন্সের জন্য -1। প্রশ্নটি জেএসন সম্পর্কিত, তবে আপনার লিঙ্কযুক্ত উল্লেখগুলি জাভাস্ক্রিপ্ট সম্পর্কিত এবং জাভাস্ক্রিপ্টে বৈধ নয় এমন এ্যাস্কিপ সিকোয়েন্সগুলি তালিকাবদ্ধ করুন \'
মার্ক অ্যামেরি

ধন্যবাদ মার্ক - আমি সত্যিই কেবল একটি বিকল্প কোণ দিতে চেয়েছি - এখানে কে এসে পৌঁছেছে তার উপর নির্ভর করে এটি দরকারী হতে পারে। তবে আমি জেএসএন এবং জাভাস্ক্রিপ্ট সম্পর্কে আপনার বক্তব্য গ্রহণ করেছি - ফোরামে নিনজা হওয়ার জন্য ধন্যবাদ।
লুইজি ডি'আমিকো

0

স্ট্রিংটি এনকোড করতে এনকোডিউআরআইকিউম্পোন্ট () ব্যবহার করুন।

যেমন। var product_list = encodeURIC কম্পোনেন্ট (JSON.stringify (product_list));

ওয়েব সার্ভারটি স্বয়ংক্রিয়ভাবে একই কাজ করায় আপনার এটিকে ডিকোড করার দরকার নেই।


0

টেম্পলেট আক্ষরিক ব্যবহার করা হচ্ছে ...

var json = `{"1440167924916":{"id":1440167924916,"type":"text","content":"It's a test!"}}`;

-2

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

প্রতিটি "একটি with" দিয়ে প্রতিস্থাপন করা শক্তিশালী নয়: ব্যবহারকারী ইনপুটটি প্রবেশ করতে পারে: \ এবং পুনরায় ব্যর্থ হয়ে যায় (কেন ভাবেন)।

পরিবর্তে, প্রথমে প্রতিটি \ (ডাবল ব্যাকস্ল্যাশ) প্রতিস্থাপন করুন। তারপরে, প্রতিটি "with" (ব্যাকস্ল্যাশ এর পরে ") প্রতিস্থাপন করুন।


-2

জসন এর উদ্দেশ্যে দ্বিগুণ উদ্ধৃত স্ট্রিংয়ের মধ্যে একক উদ্ধৃতিগুলিকে অনুমতি দেওয়ার জন্য, আপনি একক উদ্ধৃতি দ্বিগুণ করুন। {"এক্স": "প্রশ্ন কী" "X ==> X" এক্স ":" প্রশ্ন কী ""}

/codereview/69266/json-conversion-to-single-quotes

Sequ 'ক্রমটি অবৈধ।


2
JSON স্ট্রিংয়ে একক উদ্ধৃতি দ্বিগুণ করা এড়াতে পারে না। এর অর্থ হ'ল আপনার স্ট্রিংয়ে একটির পরিবর্তে দুটি একক উদ্ধৃতি রয়েছে।
মার্ক

-15

আলেকসিবির পোস্ট সম্পর্কিত:

 \'  Apostrophe or single quote
 \"  Double quote

একক উদ্ধৃতি পলায়ন কেবলমাত্র একক উদ্ধৃত জসন স্ট্রিংগুলিতে
ডাবল উদ্ধৃতি থেকে বেরিয়ে আসা কেবলমাত্র ডাবল উদ্ধৃত জেসন স্ট্রিংগুলিতে বৈধ

উদাহরণ:

'Bart\'s car'       -> valid
'Bart says \"Hi\"'  -> invalid

14
একক উদ্ধৃত স্ট্রিংগুলি JSON এ বৈধ নয়। জেএসএন জাভাস্ক্রিপ্ট নয়। JSON একক উদ্ধৃতি থেকে পালাতে অনুমতি দেয় না। জেএসএন সিনট্যাক্সের খুব সাধারণ নথির জন্য json.org দেখুন ।
srm

3
ডাউনভোট - কারণ একক উদ্ধৃতি jsons বৈধ নয়!
ডোমিনিকএঞ্জারার

একক উদ্ধৃতি json এ অবৈধ। যদি সম্ভব হয় তবে দয়া করে একটি কাজের নমুনা দেখান
রোহিত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.