কোনও জেএসওএন মানটিতে একটি বহুমুখী স্ট্রিং থাকতে পারে


114

আমি একটি JSON ফাইল লিখছি যা একটি জাভা প্রোগ্রাম দ্বারা পড়া হবে। খণ্ডটি নিম্নরূপ ...

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : "this is a very long line which is not easily readble.
                  so i would like to write it in multiple lines.
                  but, i do NOT require any new lines in the output.
                  I need to split the string value in this input file only.
                  such that I don't require to slide the horizontal scroll again and again while verifying the correctness of the statements.
                  the prev line, I have shown, without splitting just to give a feel of my problem"
    }
  }
}


17
আমি মনে করি এটি সিরিয়ালযুক্ত জেএসএন ফাইলের পঠনযোগ্যতা সম্পর্কে এবং লোড হওয়া ডেটাতে লাইনব্রেকগুলি সম্পর্কে নয় (এইভাবে, জেএসএনে মাল্টলাইন স্ট্রিংয়ের সদৃশ নয় )। এটিকে আরও ভাবুন যা JSON কে কনফিগারেশন ফাইল হিসাবে ব্যবহার করার মতো যেখানে আপনার দীর্ঘ স্ট্রিং রয়েছে এবং পাঠযোগ্যতার জন্য, কেউ যদি পাঠ্য সম্পাদকের মাধ্যমে এটি সম্পাদনা করে থাকে তবে স্ট্রিংটিকে শক্তভাবে মোড়ানোতে সহায়ক।
zashu

2
@ জাশু: বেশিরভাগ পাঠ্য সম্পাদকের একটি নরম-মোড়ক ফাংশন রয়েছে। এটি কিছু হার্ড-কোডড লাইনের প্রস্থের চেয়ে তত্ক্ষণাত কার্যকর।
অরবিতের হালকাত্বের রেস

4
এই জাতীয় দীর্ঘ লাইনের ফাইলগুলিতে @ লাইটনেসেসেসিনআরবিট চলমান গিট ডিফার্স (বা একত্রিত হওয়া সংঘাতের সমাধান) আরও ব্যথা।
হুবার্ট কারিও

1
এটি জেএসএনে একাধিক ধরণের মাল্টিলাইন স্ট্রিং, ওপির প্রশ্নের বরাত দিয়ে: " জেএসওএন-এ মাল্টি-লাইন স্ট্রিংগুলি রাখা কি সম্ভব? এটি বেশিরভাগ ভিজ্যুয়াল স্বাচ্ছন্দ্যের জন্য তাই আমি মনে করি আমি কেবল আমার সম্পাদকের শব্দের মোড়কে চালু করতে পারি, তবে আমি 'আমি শুধু কিন্ডিয়াস কৌতুহলী ... "
আন্দ্রে ফিগেরইডো

উত্তর:


61

স্পেসিফিকেশন পরীক্ষা করে দেখুন ! জেএসওন ব্যাকরণের চরের উত্পাদন নিম্নলিখিত মানগুলি নিতে পারে:

  • যে কোনও-ইউনিকোড-চরিত্র-ব্যতীত "- \বা--নিয়ন্ত্রণ-অক্ষর
  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u চার হেক্স-সংখ্যা

নিউলাইনগুলি "নিয়ন্ত্রণের অক্ষর" তাই, না, আপনার স্ট্রিংয়ের মধ্যে আক্ষরিক নতুন লাইন নাও থাকতে পারে। তবে আপনি যে কোনও সংমিশ্রণটি \nএবং \rআপনার প্রয়োজন অনুসারে এটি এনকড করতে পারেন ।

JSONLint টুল নিশ্চিত করে যে আপনার তাদেরকে JSON অবৈধ।


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


32

আমি আপনার সঠিক প্রয়োজন সম্পর্কে নিশ্চিত নই তবে 'পাঠ্যতা' উন্নত করার একটি সম্ভাব্য সমাধান হ'ল এটিকে অ্যারে হিসাবে সংরক্ষণ করা।

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : ["this is a very long line which is not easily readble.",
                  "so i would like to write it in multiple lines.",
                  "but, i do NOT require any new lines in the output."]
    }
  }
}

}

যখনই প্রয়োজন হবে আবার ফিরে আসুন

result.join(" ")

13
যদিও এটি অবাস্তব নয়। এটি একটি বিমূর্ততা ফাঁস। আমি এইভাবে নির্দিষ্ট করা ডেটা ফর্ম্যাটটিকে মূলত ভাঙ্গা হিসাবে বিবেচনা করব।
20:38

4
আমি কেবল স্ট্রিং রিডিবিলিটি বাড়াতে (কেবলমাত্র আমার অনুমান ডিবাগিংয়ের কারণে) কোনও এপিআই বা জেএসওএন নথি ডিজাইনের কল্পনা করতে পারি না: | ....
আদম ডাইগা

"আমি এইভাবে নির্দিষ্ট করা ডেটা ফর্ম্যাটটিকে মূলত ভাঙ্গা হিসাবে বিবেচনা করব" " যদিও এটি একটি পরীক্ষার মামলার জন্য বিবেচনা করুন। আপনি যদি হার্ড-কোড স্ট্রিং করতে চান তবে আপনি সম্ভবত একটি সম্পত্তি ফাইল চান। আমি ব্যক্তিগত পরিস্থিতিতে জাসনে "আসল" ডেটা সংরক্ষণ করি না would তবে যদি কোনও পরীক্ষা থেকে কোনও পরীক্ষায় না যাওয়ার সহজ উপায় হয় তবে এর জন্য যান।
এসএফ_জেফ

@ অ্যাডামডাইগা আসলে জেসন ফাইলগুলিকে একটি সিভিএসে সংরক্ষণ করার জন্য কার্যকর হতে পারে যেখানে ডেল্টার ইউনিট লাইন।
yota

7

খুব ভাল সমাধান নয়, তবে আপনি এইচজেসন সরঞ্জামটি চেষ্টা করতে পারেন । লিঙ্ক । এটি আপনাকে সম্পাদনায় বহু-রেখাযুক্ত পাঠ্য লেখার অনুমতি দেয় এবং তারপরে এটিকে যথাযথ বৈধ JSON ফর্ম্যাটে রূপান্তর করে। দ্রষ্টব্য: এটি নতুন রেখার জন্য '\ n' অক্ষর যুক্ত করে, তবে আপনি কেবল "সমস্ত প্রতিস্থাপন করুন .." ফাংশন দিয়ে কোনও পাঠ্য সম্পাদককে এগুলি মুছতে পারেন।

পিএস প্রশ্নের একটি মন্তব্য হওয়া উচিত, কিন্তু যথেষ্ট রেপো নেই, দুঃখিত।


এটি আসলে একটি ভাল ধারণা। সংস্করণটি Hjson নিয়ন্ত্রণ করে এবং এটি প্রয়োজনীয় হিসাবে এটি JSON এ স্থানান্তর করেছে।
অরবিটে

3

যেহেতু আমি বুঝতে পারি প্রশ্নটি কীভাবে নিয়ন্ত্রণ চিহ্ন ব্যবহার করে একটি স্ট্রিং পাস করবেন তা নয় jsonতবে কীভাবে ফাইলটিতে জসন সংরক্ষণ এবং পুনরুদ্ধার করবেন যেখানে আপনি সম্পাদক নিয়ন্ত্রণ চিহ্নগুলির সাথে একটি স্ট্রিং বিভক্ত করতে পারেন।

আপনি যদি কোনও ফাইলে মাল্টলাইন স্ট্রিং সংরক্ষণ করতে চান তবে আপনার ফাইলটি বৈধ jsonঅবজেক্টটি সঞ্চয় করবে না । তবে আপনি যদি jsonকেবল আপনার প্রোগ্রামটিতে আপনার ফাইলগুলি ব্যবহার করেন তবে আপনি নিজের পছন্দ মতো ডেটা সঞ্চয় করতে পারবেন এবং প্রতিবার আপনার প্রোগ্রামে এটি লোড করে ম্যানুয়ালি ফাইল থেকে সমস্ত নিউলাইনগুলি সরিয়ে ফেলতে পারেন এবং তারপরে জেসন পার্সারে যেতে পারেন।

অথবা, বিকল্প হিসাবে, যা আরও ভাল হবে, আপনার jsonডেটা সোর্স ফাইলগুলি থাকতে পারে যেখানে আপনি নিজের পছন্দ অনুযায়ী একটি স্টিং সম্পাদনা করতে পারেন এবং তারপরে jsonআপনার প্রোগ্রামটি ব্যবহার করবে এমন বৈধ ফাইলের জন্য কিছু ইউটিলিটি সহ সমস্ত নতুন লাইন সরিয়ে ফেলতে পারে।


2

আমি বিশ্বাস করি এটি আপনি কী জেএসন দোভাষী ব্যবহার করছেন তার উপর নির্ভর করে ... সরল জাভাস্ক্রিপ্টে আপনি লাইন টার্মিনেটর ব্যবহার করতে পারেন

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : "this is a very long line which is not easily readble. \
                  so i would like to write it in multiple lines. \
                  but, i do NOT require any new lines in the output."
    }
  }
}

এটি সঠিক, তবে ইনডেন্টেশন স্পেসগুলি আউটপুট দেয়: a\ c=> a c
আন্দ্রে ফিগুয়েরেদো

1
জাভাস্ক্রিপ্টের কোনও "জেএসএন দোভাষী" নেই যা এটি গ্রহণ করবে। এটি কেবল একটি স্ট্রিংয়ে JSON নিতে পারে। সত্য, আপনি যদি কোনও স্ট্রিং আক্ষরিক অভ্যন্তরে জেএসএন সরবরাহ করে থাকেন তবে আপনি এই পদ্ধতিকে গ্রহণ করতে পারেন তবে এটি করা অস্বাভাবিক বিষয়। আপনি জাভাস্ক্রিপ্টে জাসনকে প্রকৃত বস্তু ঘোষণার সাথে বিভ্রান্ত করছেন?
অরবিটে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.