জেসনকে তার JSON ফর্ম্যাট করতে সহায়তা করুন


11

জেসনের একটি বড় জেএসএন রয়েছে তবে এটি অপঠনযোগ্য, তাই তাকে এটি প্রিটিফাই করা দরকার।

ফর্ম্যাটিং স্পেক

জেএসএনের 4 টি বিভিন্ন ধরণের রয়েছে:

  • নাম্বার; মাত্র0-9
  • স্ট্রিংস; ডাবল উদ্ধৃত "স্ট্রিংগুলি সহ পালিয়ে গেছে\
  • অ্যারেগুলির; দ্বারা বিভাজনিত []আইটেমগুলি দ্বারা পৃথক করে ,আইটেমগুলি এই ধরণের যে কোনও একটি হতে পারে
  • অবজেক্টস; দ্বারা বিসর্জন {}, ফর্ম্যাট key: valueযেখানে কী একটি স্ট্রিং হয় এবং মান এই ধরণের যে কোনও একটি

ব্যবধান

  • আইটেমগুলির মধ্যে কমা দেওয়ার পরে অ্যারেগুলির ঠিক এক স্থান থাকা উচিত
  • এর পরে কী এবং মানটির মধ্যে অবজেক্টের কেবল একটি স্থান থাকা উচিত :

খাঁজ

  • প্রতিটি নেস্টিং স্তর পূর্বের চেয়ে 2 টি বেশি ইনডেন্ট করা হয়
  • প্রতিটি বস্তু কী / মান জোড়া সর্বদা নিজস্ব লাইনে থাকে। বস্তু অভিযুক্ত হয়
  • কোনও অ্যারে একাধিক লাইন জুড়ে ইন্টেন্ট করা হয় যদি এতে অন্য অ্যারে বা অবজেক্ট থাকে। অন্যথায় অ্যারে এক লাইনে থাকবে

বিধি

  • বিল্ট-ইনগুলি যা এই কাজটিকে তুচ্ছ করে দেয় তা অনুমোদিত নয়
  • সর্বদা হিসাবে স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়

উদাহরণ

[1,2,3]
[1, 2, 3]
{"a":1,"b":4}
{
  "a": 1,
  "b": 4
}
"foo"
"foo"
56
56
{"a":[{"b":1,"c":"foo"},{"d":[2,3,4,1], "a":["abc","def",{"d":{"f":[3,4]}}]}]}
{
  "a": [
    {
      "b": 1,
      "c": "foo"
    },
    {
      "d": [2, 3, 4, 1],
      "a": [
        "abc",
        "def",
        {
          "d": {
            "f": [3, 4]
          }
        }
      ]
    }
  ]
}
[2,["foo123 ' bar \" baz\\", [1,2,3]]]
[
  2,
  [
    "foo123 ' bar \" baz\\",
    [1, 2, 3]
  ]
]
[1,2,3,"4[4,5]"]
[1, 2, 3, "4[4,5]"]
[1,2,3,{"b":["{\"c\":[2,5,6]}",4,5]}]
[
  1,
  2,
  3,
  {
    "b": ["{\"c\":[2,5,6]}", 4, 5]
  }
]

1
JSON বিল্টিন পার্সিং অনুমোদিত?
পুর্কাকুডারী

বস্তু / অ্যারে খালি থাকতে পারে? যদি তারা একাধিক লাইনে বিভক্ত হয় তবে আমরা অ্যারেগুলিতে কমা পরে কোনও স্থান মুদ্রণ করতে পারি?
মার্টিন ইন্ডার

@ মার্টিনব্যাটনার নং, এবং হ্যাঁ
ডাউনগোট 1'16

@ পিটু 1998 এইচএম, আমি না বলতে যাচ্ছি
ডাউনগোট

ভাষার পার্সার ভাষাগুলি কি অনুমোদিত?
মামা ফান রোল

উত্তর:


1

জাভাস্ক্রিপ্ট (ES6), 368 বাইট

f=(s,r=[],i='',j=i+'  ',a=[])=>s<'['?([,,r[0]]=s.match(s<'0'?/("(?:\\.|[^"])*")(.*)/:/(\d+)(.*)/))[1]:s<'{'?(_=>{for(;s<']';s=r[0])a.push(f(s.slice(1),r,j));r[0]=s.slice(1)})()||/\n/.test(a)?`[
${j+a.join(`,
`+j)}
${i}]`:`[${a.join`, `}]`:(_=>{for(a=[];s<'}';s=r[0])a.push(f(s.slice(1),r,j)+': '+f(r[0].slice(1),r,j));r[0]=s.slice(1)})()||`{
${j+a.join(`,
`+j)}
${i}}`

কম গল্ফড:

function j(s, r=[], i='') { // default to no indentation
    if (s < '0') { // string
        let a = s.match(/("(?:\\.|[^"])*")(.*)/);
        r[0] = a[2]; // pass the part after the string back to the caller
        return a[1];
    } else if (s < '[') { // number
        let a = s.match(/(\d+)(.*)/);
        r[0] = a[2]; // pass the part after the string back to the caller
        return a[1];
    } else if (s < '{') { // array
        let a = [];
        while (s < ']') { // until we see the end of the array
            s = s.slice(1);
            a.push(j(s, r, i + '  ')); // recurse with increased indentation
            s = r[0]; // retrieve the rest of the string
        }
        r[0] = s.slice(1); // pass the part after the string back to the caller
        if (/\n/.test(a.join())) { // array contained object
            return '[\n  ' + i + a.join(',\n  ' + i) + '\n' + i + ']';
        } else {
            return '[' + a.join(', ') + ']';
        }
    } else { // object
        let a = [];
        while (s < '}') { // until we see the end of the object
            s = s.slice(1);
            let n = j(s, r, i + '  ');
            s = r[0].slice(1);
            let v = j(s, r, i + '  ');
            a.push(n + ': ' + v);
            s = r[0]; // retrieve the rest of the string
        }
        r[0] = s.slice(1); // pass the part after the string back to the caller
        return '{\n  ' + i + a.join(',\n  ' + i) + '\n' + i + '}';
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.