क्या JSON वैल्यू में मल्टीलाइन स्ट्रिंग हो सकती है


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 फ़ाइल की पठनीयता के बारे में और अधिक है नहीं भरी हुई डेटा में लाइनब्रेक के बारे में (इस प्रकार, का डुप्लिकेट नहीं JSON में बहुपंक्ति तार )। इसे और अधिक समझें जैसे JSON को एक कॉन्फ़िगरेशन फ़ाइल के रूप में उपयोग करना जहां आपके पास एक लंबी स्ट्रिंग है और पठनीयता के लिए, यह स्ट्रिंग को हार्ड-रैप करने में सहायक है, अगर कोई पाठ संपादक के माध्यम से इसे संपादित कर रहा है।
zashu

2
@ ज़ाशु: ज्यादातर टेक्स्ट एडिटर्स का सॉफ्ट-रैप फंक्शन होता है। यह कुछ हार्ड-कोडित लाइन चौड़ाई की तुलना में तुरंत अधिक उपयोगी है।
ऑर्बिट में

4
ऐसी लंबी लाइनों वाली फाइलों पर @LightnessRacesinOrbit रनिंग गिट भिन्न होता है (या मर्ज टकराव को हल करता है) भी एक दर्द है।
ह्यूबर्ट करियो

1
यह JSON में मल्टीलाइन स्ट्रिंग का एक है, जो ओपी के प्रश्न का हवाला देता है: " क्या JSON में मल्टी-लाइन स्ट्रिंग्स होना संभव है? यह ज्यादातर दृश्य आराम के लिए है, इसलिए मुझे लगता है कि मैं सिर्फ अपने संपादक में शब्द लपेट सकता हूं, लेकिन मैं 'मी
आंद्रे फिग्यूएरेडो

जवाबों:


61

विनिर्देश की जाँच करें ! JSON व्याकरण के चार उत्पादन निम्न मान ले सकते हैं:

  • किसी भी-यूनिकोड-चरित्र-except- "-या- \-या नियंत्रण-चरित्र
  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u चार हेक्स अंक

न्यूलाइन्स "नियंत्रण वर्ण" हैं, इसलिए, नहीं, आपके पास अपने स्ट्रिंग के भीतर एक शाब्दिक न्यूलाइन नहीं हो सकता है। हालाँकि आप इसके संयोजन का उपयोग करके इसे एन्कोड कर सकते हैं \nऔर \rआपको इसकी आवश्यकता होगी।

JSONLint उपकरण की पुष्टि करेगी JSON अमान्य है।


अद्यतन: और यदि आप अपने JSON सिंटैक्स के अंदर नई रूपरेखाएँ लिखना चाहते हैं, तो वास्तव में डेटा में नए अंक शामिल नहीं हैं, तो आप भाग्य से दोगुने हैं। जबकि JSON एक हद तक मानव-अनुकूल होने का इरादा है, यह अभी भी डेटा है और आप उस डेटा पर मनमाना स्वरूपण लागू करने का प्रयास कर रहे हैं। यह बिल्कुल नहीं है कि JSON के बारे में क्या है।


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
हालांकि यह अनिश्चित है। यह एक अमूर्त रिसाव है। मैं इस प्रकार निर्दिष्ट डेटा प्रारूप पर विचार करूंगा, अनिवार्य रूप से, टूटा हुआ।
ऑर्बिट

4
मैं इस तरह से सिर्फ पठनीयता बढ़ाने के लिए एक एपीआई या JSON दस्तावेज़ डिज़ाइन करने की कल्पना नहीं कर सकता (केवल डीबगिंग कारणों से मुझे लगता है): | ....
एडम डाइगा

"मैं इस तरह से निर्दिष्ट डेटा प्रारूप पर विचार करूंगा, अनिवार्य रूप से, टूटा हुआ।" विचार करें कि यह एक परीक्षण मामले के लिए है, हालांकि। यदि आप हार्ड-कोड स्ट्रिंग्स चाहते हैं, तो आप शायद एक गुण फ़ाइल चाहते हैं। मैं व्यक्तिगत रूप से सामान्य परिस्थितियों में JSON में "वास्तविक" डेटा संग्रहीत नहीं करूंगा। लेकिन अगर यह बिना परीक्षण के परीक्षण से जाने का एक सरल तरीका है, तो इसके लिए जाएं।
sf_jeff

@ अदम्यगा वास्तव में json फ़ाइलों को CVS में स्टोर करने के लिए उपयोगी हो सकता है, जहां डेल्टा की इकाई लाइन है।
यूल

7

बहुत अच्छा समाधान नहीं है, लेकिन आप hjson उपकरण की कोशिश कर सकते हैं । लिंक करें । यह आपको संपादक में बहु-पंक्ति पाठ लिखने की अनुमति देता है और फिर इसे उचित वैध JSON प्रारूप में परिवर्तित करता है। नोट: इसमें नई पंक्तियों के लिए '\ n' अक्षर जोड़े गए हैं, लेकिन आप उन्हें "सभी को बदलें .." फ़ंक्शन के साथ किसी भी पाठ संपादक में हटा सकते हैं।

PS प्रश्न के लिए एक टिप्पणी होनी चाहिए, लेकिन पर्याप्त रेपो नहीं है, क्षमा करें।


यह वास्तव में एक अच्छा विचार है। संस्करण Hjson को नियंत्रित करता है और इसे JSON में आवश्यकतानुसार स्थानांतरित कर देता है।
ऑर्बिट

3

जैसा कि मैं समझ सकता हूं कि सवाल यह नहीं है कि नियंत्रण प्रतीकों के साथ एक स्ट्रिंग कैसे पास की जाती है, jsonबल्कि फाइल में जोंस को कैसे स्टोर और रिस्टोर किया जाए जहां आप एक स्ट्रिंग को संपादक नियंत्रण प्रतीकों के साथ विभाजित कर सकते हैं।

अगर आप किसी फाइल में मल्टीलिन स्ट्रिंग स्टोर करना चाहते हैं तो आपकी फाइल वैध jsonऑब्जेक्ट को स्टोर नहीं करेगी । लेकिन यदि आप अपनी jsonफ़ाइलों का उपयोग केवल अपने प्रोग्राम में करते हैं, तो आप डेटा को स्टोर कर सकते हैं जैसा कि आप चाहते थे और फ़ाइल से सभी नई सूचियों को मैन्युअल रूप से हटा दें, जब भी आप इसे अपने प्रोग्राम में लोड करते हैं और फिर json parser पास करते हैं।

या, वैकल्पिक रूप से, जो बेहतर होगा, आपके पास आपके 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 दुभाषिया" नहीं है जो इसे स्वीकार करेगा। यह केवल JSON को एक स्ट्रिंग में ले सकता है। सच है, यदि आपने JSON को एक स्ट्रिंग शाब्दिक के अंदर प्रदान किया है, तो आप इस दृष्टिकोण को ले सकते हैं, लेकिन यह एक असामान्य बात है। क्या आप जावास्क्रिप्ट में JSON को वास्तविक ऑब्जेक्ट घोषणाओं के साथ भ्रमित कर रहे हैं?
ऑर्बिट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.