Stringify और Regex की जगह JSON (जावास्क्रिप्ट में) को फॉर्मेट करने में मदद चाहिए

Jan 19 2021

मुझे रेगेक्स के साथ कुछ याद आ रहा है और यह कॉमा से पहले प्रत्येक आइटम के अंतिम अक्षर को हटा रहा है।

नमूना कोड:

let test_json = { 
    "a" : { "a1" : "one", "is_active" : true, "a2" : "two" },
    "b" : { "b1" : "one", "is_active" : true, "b2" : "two" } 
}; 

JSON.stringify(test_json, null, 3).replace(/[^}],\n( )*"/g, ',   "');

परिणाम है:

"{
   "a": {
      "a1": "one,   "is_active": tru,   "a2": "two"
   },
   "b": {
      "b1": "one,   "is_active": tru,   "b2": "two"
   }
}"

मैं जो पाने की कोशिश कर रहा हूं वह है:

"{
   "a": {
      "a1": "one",   "is_active": true,   "a2": "two"
   },
   "b": {
      "b1": "one",   "is_active": true,   "b2": "two"
   }
}"

जो चीजें गलत हैं:
"एक," एक "
होना चाहिए , " ट्रू, "सच" होना चाहिए,

जवाब

3 BenWainwright Jan 19 2021 at 06:36

आपकी समस्या यह है कि आप वर्णों के निम्नलिखित अनुक्रम को पा रहे हैं

  • कोई भी चरित्र जो एक समापन ब्रेस नहीं है
  • एक अल्पविराम
  • एक नया चरित्र
  • कितनी भी जगह

और पूरे अनुक्रम की जगह । चूंकि "सच" के अंत में "ई" एक समापन ब्रेस नहीं है, इसलिए इसे भी बदल दिया जाता है।

अनुक्रम में पहले आइटम के लिए आपको जो आवश्यक है वह "एक अल्पविराम है जो एक समापन ब्रेस के तुरंत बाद आता है"। आप एक नकारात्मक खोज के उपयोग से ऐसा कर सकते हैं ।

let test_json = {
  a: {
    a1: "one",
    is_active: true,
    a2: "two"
  },
  b: {
    b1: "one",
    is_active: true,
    b2: "two"
  },
};

const result = JSON.stringify(test_json, null, 3).replace(
  /(?<!}),\n\s*/g,
  ", "
);

console.log(result);

1 MCP Jan 19 2021 at 06:31
JSON.stringify(test_json,null,3).replace(/([^}]?),\n( )*"/g, '$1,   "');

यह सबसे अच्छा तरीका नहीं है, लेकिन यह पहली बात है जो दिमाग में आई