আমি কীভাবে নোড.জেএস ব্যবহার করে জেএসএন-কে প্রিন্ট করতে পারি?


436

এটি একটি সমস্যার সমাধান বলে মনে হচ্ছে তবে আমি এর কোনও সমাধান খুঁজে পাচ্ছি না।

মূলত, আমি একটি JSON ফাইল পড়েছি, একটি কী পরিবর্তন করি এবং একই ফাইলটিতে নতুন JSON আবার লিখি। সমস্ত কাজ করে তবে আমি JSON ফর্ম্যাটিংটি looseিলে করছি S সুতরাং পরিবর্তে:

{
  name:'test',
  version:'1.0'
}

আমি পাই

{name:'test',version:'1.1'}

নোড.জেএস-এ ফাইল করার জন্য ভাল ফর্ম্যাটেড জেএসওএন লেখার কোনও উপায় আছে?


JSON.stringifyচক্রীয় অবজেক্টগুলিতে চোক চাপায় এবং util.inspectবৈধ জেসন তৈরি করে না। :
N নোডজেএস

@ থারস্মমনার: এটি জেএসএনের সমস্যা, নোডের সাথে নয় — জেএসওএন স্থানীয়ভাবে চক্রীয় রেফারেন্স সমর্থন করে না। একটি সমাধান পাওয়া যাবে এখানে, অন্য প্রশ্নে
শাশা চেদিগোভ

উত্তর:


814

JSON.stringifyএর তৃতীয় প্যারামিটার সুন্দর-মুদ্রণের জন্য সাদা-স্থান সন্নিবেশকে সংজ্ঞায়িত করে। এটি একটি স্ট্রিং বা একটি সংখ্যা (স্পেসের সংখ্যা) হতে পারে। নোড আপনার ফাইল সিস্টেমে এটি লিখতে পারে fs। উদাহরণ:

var fs = require('fs');

fs.writeFile('test.json', JSON.stringify({ a:1, b:2, c:3 }, null, 4));
/* test.json:
{
     "a": 1,
     "b": 2,
     "c": 3,
}
*/

MDN , নোড fs ডক্সে JSON.stringify () ডক্স দেখুন


1
দ্রষ্টব্য: 4 এর পরিবর্তে, "\t"আপনি যদি ট্যাবগুলি চান তবে ব্যবহার করুন ।
জেরেমি থিল

সর্বশেষ নোডজে আপনাকে তৃতীয় প্যারামিটার হিসাবে একটি কলব্যাক ফাংশন সরবরাহ করতে হবে, এই উত্তরটি দেখুন: stackoverflow.com/a/11677276/675065
Alp

216

আমি মনে করি এটি কার্যকর হতে পারে ... আমি উদাহরণ কোড পছন্দ করি :)

var fs = require('fs');

var myData = {
  name:'test',
  version:'1.0'
}

var outputFilename = '/tmp/my.json';

fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
    if(err) {
      console.log(err);
    } else {
      console.log("JSON saved to " + outputFilename);
    }
}); 

4
tmpফোল্ডারটি বিদ্যমান আছে তা নিশ্চিত করুন বা অন্যথায় এটি ব্যর্থ হতে পারে।
ল্যারি ব্যাটেল

2
বেশিরভাগ ইউনিক্স সিস্টেমে (ম্যাক অ্যান্ড লিনাক্স সহ..আমি যদি বিএসডি প্রত্যাহার করি), tmpফোল্ডারটি ডিফল্টরূপে উপস্থিত থাকে
অ্যান্টনি

উইন্ডোগুলির ক্ষেত্রে কী অবস্থান (আউটপুট ফাইলের নাম) দিতে হবে
দেবরাথ

আমি জানি না কেন আমার ফাইলটি কলব্যাক ছাড়া লিখিত হয়নি (সবে খালি খালি) ... বা সম্ভবত এটি অ্যাসিঙ্ক, এবং এটি কার্যকর হয়নি কারণ অ্যাপ্লিকেশন শুরু করার সময় আমার ব্যতিক্রম ছুঁড়েছিল?
টমাসজ গ্যান্ডোর

1
ধন্যবাদ, এটি আমাকে অনেক সাহায্য করেছে।
সুরজ জৈন

83

আপনি যদি কেবল কোনও অবজেক্টটি প্রিন্ট করতে চান এবং এটি বৈধ JSON হিসাবে রফতানি না করে আপনি ব্যবহার করতে পারেন console.dir()

এটি সিনট্যাক্স-হাইলাইটিং, স্মার্ট ইনডেন্টেশন ব্যবহার করে, কীগুলি থেকে উদ্ধৃতিগুলি সরিয়ে দেয় এবং আউটপুটটিকে যতটা সুন্দর করে তোলে ততই সুন্দর করে তোলে।

const jsonString = `{"name":"John","color":"green",
                     "smoker":false,"id":7,"city":"Berlin"}`
const object = JSON.parse(jsonString)

console.dir(object, {depth: null, colors: true})

লগ করা অবজেক্টের স্ক্রিনশট

হুডের নীচে এটির জন্য একটি শর্টকাট console.log(util.inspect(…))। পার্থক্যটি হ'ল এটি কোনও জিনিসে inspect()সংজ্ঞায়িত কোনও কাস্টম ফাংশনকে বাইপাস করে।


8
কনসোল.ডির বৈধ জসন তৈরি করে না।
গ্রেগ লিন্ড

1
@ গ্রেগলাইন্ড উত্তরে তা স্পষ্ট করলেন!
অ্যাডিয়াস

এটি আমার এক্সপ্রেস সার্ভারের স্টল তৈরি করেছে। আমি জানি না কেন :(
সংকেত বার্ডে

34

আপনি যদি এটি কোথাও সঞ্চয় করতে না চান তবে কেবল ডিবাগিংয়ের উদ্দেশ্যে অবজেক্টটি দেখুন।

console.log(JSON.stringify(object, null, "  "));

ইনডেন্টেশন সামঞ্জস্য করতে আপনি তৃতীয় প্যারামিটারটি পরিবর্তন করতে পারেন।


1
আমি এই সমাধানটি চিরকালের জন্য খুঁজছি! শেষ পরম এক কবজির মতো কাজ করে!
vt2424253

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