কীভাবে নোড.জেএস ব্যবহার করে জেএসএন পার্স করবেন?


971

নোড.জেএস ব্যবহার করে জেএসএনকে কীভাবে পার্স করা উচিত? এমন কিছু মডিউল আছে যা JSON কে নিরাপদে যাচাই করবে এবং পার্স করবে?

উত্তর:


1098

আপনি সহজভাবে ব্যবহার করতে পারেন JSON.parse

JSONঅবজেক্টের সংজ্ঞা ECMAScript 5 স্পেসিফিকেশনের অংশ । নোড.জেএস গুগল ক্রোমের ভি 8 ইঞ্জিনে নির্মিত, যা ইসিএমএ স্ট্যান্ডার্ডকে মেনে চলে। সুতরাং, নোড.জেএস এর একটি বিশ্বব্যাপী অবজেক্ট [ডক্স ]ও রয়েছেJSON

দ্রষ্টব্য - JSON.parseবর্তমান থ্রেডটি বেঁধে রাখতে পারে কারণ এটি একটি সিঙ্ক্রোনাস পদ্ধতি। সুতরাং আপনি যদি বড় JSON অবজেক্টকে বিশ্লেষণ করার পরিকল্পনা করছেন তবে স্ট্রিমিং জসন পার্সার ব্যবহার করুন।


যে কেউ কেন জানি সরকারী নথিতে নেই? বা, যদি এটি হয় তবে এটি কোথায় পাবেন?
স্ন্যাপফ্র্যাক্টলপপ

34
@ স্নাপফ্র্যাক্টলপপ: ডকুমেন্টেশনটি কেবল ফাংশন ইত্যাদির বিবরণ দেয় যা নোড.জেএস এর অংশ are স্ট্যান্ডার্ড জাভাস্ক্রিপ্ট বৈশিষ্ট্যগুলি ভি 8 এর অংশ , নোড.জেএস অন্তর্নির্মিত। আমি সেই অনুযায়ী উত্তর আপডেট করেছি।
ফেলিক্স ক্লিং

1
@ ফেলিক্সকলিং এর মূল্য কী, তার জন্য নোডের গিথুব
দামিয়ানব

এখানে, আমি একটি ডেমো প্রকাশ করেছি যেখানে আপনি এই উত্তরটি অনলাইনে দেখতে এবং খেলতে পারবেন (পার্সিং উদাহরণটি অ্যাপ্লিকেশন: js ফাইলের মধ্যে রয়েছে - তারপরে রান বোতামে ক্লিক করুন এবং ফলাফলটি টার্মিনালে দেখুন): লিঙ্কটি আপনি কোডটি সংশোধন করতে পারেন এবং প্রভাবটি দেখুন ...
নাথান g

আপনার উত্তরের জন্য জাভাস্ক্রিপ্ট সিনট্যাক্সের পূর্ব জ্ঞান প্রয়োজন। ব্যবহারের উদাহরণ প্রদর্শন করা কতটা কঠিন হবে? JSON.parse (STR); // হ'ল নুব-বান্ধব এবং অতএব আরও ভাল উত্তর
ওয়েবব

660

আপনার .json ফাইলের প্রয়োজন হতে পারে

var parsedJSON = require('./file-name');

উদাহরণস্বরূপ, যদি config.jsonআপনার উত্স কোড ফাইলের মতো একই ডিরেক্টরিতে কোনও ফাইল থাকে তবে আপনি ব্যবহার করতে পারেন:

var config = require('./config.json');

বা (ফাইল এক্সটেনশন বাদ দেওয়া যেতে পারে):

var config = require('./config');

দয়া করে মনে রাখবেন requireহয় সমকালীন এবং শুধুমাত্র ফাইল সার্চ একবার , নিম্নলিখিত কল ক্যাশে থেকে ফলাফলের আসতে

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


4
আপনি যদি এই পদ্ধতিটি ফাইলটি বিশ্লেষণ করতে ব্যবহার করেন তবে প্রয়োজনীয়তার জন্য পাথটি অ্যাকাউন্টে নেওয়ার বিষয়টি নিশ্চিত করুন। উদাহরণস্বরূপ, আপনার এর মতো কিছু করতে হতে পারে: './file-name-with-no-extension' প্রয়োজন (উদাহরণস্বরূপ ফাইলটি যদি বর্তমান ডিরেক্টরিতে থাকে তবে)
স্ন্যাপশট

94
লক্ষ্য করুন যে প্রতিক্রিয়াটি ক্যাশে হয়েছে। উদাহরণস্বরূপ, যদি আপনার উপরে কোনও ফাংশনে কল প্রয়োজন হয়, ফাংশনটি কল করুন, JSON ফাইলটি পরিবর্তন করুন এবং ফাংশনটি আবার কল করুন, আপনি JSON ফাইলের পুরানো সংস্করণ পাবেন । আমাকে কয়েকবার ধরে ফেলেছে!
বেন ক্লেটন

15
এটিও requireসিঙ্ক্রোনাস Note আপনি যদি এর fs.readFileপরিবর্তে বন্ধুত্বপূর্ণ ব্যবহারটি async করতে চানJSON.parse
ইভান মুরান

29
এই পন্থাটি কি কেবল জাভাস্ক্রিপ্ট হিসাবে ফাইলটিকে বিবেচনা করবে, এইভাবে .json ফাইলটিতে স্বেচ্ছাসেবক কোড চলমান?
d11wtq

15
সাধারণ দ্রষ্টব্য: .jsonএক্সটেনশনটি ব্যবহার করতে ভুলবেন না ! যদি আপনার ফাইলটির .jsonএক্সটেনশন না থাকে , প্রয়োজনে এটি কোনও জসন ফাইল হিসাবে বিবেচনা করবে না।
জেসন

323

আপনি ব্যবহার করতে পারেনJSON.parse()

আপনার JSONযেকোন ECMAScript 5 সামঞ্জস্যপূর্ণ জাভাস্ক্রিপ্ট প্রয়োগে অবজেক্টটি ব্যবহার করতে সক্ষম হওয়া উচিত । এবং ভি 8 , যার উপরে নোড.জেস নির্মিত হয়েছে সেগুলির মধ্যে একটি।

দ্রষ্টব্য: আপনি যদি সংবেদনশীল তথ্য (যেমন পাসওয়ার্ড) সঞ্চয় করতে কোনও JSON ফাইল ব্যবহার করেন তবে এটি করার এটি ভুল উপায় way হেরোকু এটি কী করে তা দেখুন: https://devcenter.heroku.com/articles/config-vars#setting-up-config-vars-for-a-dep কাজের- অ্যাপ্লিকেশন । আপনার প্ল্যাটফর্মটি এটি কী করে তা সন্ধান করুন এবং process.envকোডের মধ্যে থেকে কনফিগারেশন ভারগুলি পুনরুদ্ধার করতে ব্যবহার করুন ।


JSON ডেটাযুক্ত একটি স্ট্রিং পার্স করা

var str = '{ "name": "John Doe", "age": 42 }';
var obj = JSON.parse(str);

JSON ডেটাযুক্ত একটি ফাইল পার্স করা হচ্ছে

fsমডিউল সহ আপনাকে কিছু ফাইল অপারেশন করতে হবে ।

অ্যাসিঙ্ক্রোনাস সংস্করণ

var fs = require('fs');

fs.readFile('/path/to/file.json', 'utf8', function (err, data) {
    if (err) throw err; // we'll not consider error handling for now
    var obj = JSON.parse(data);
});

সিঙ্ক্রোনাস সংস্করণ

var fs = require('fs');
var json = JSON.parse(fs.readFileSync('/path/to/file.json', 'utf8'));

আপনি ব্যবহার করতে চান require? আবার চিন্তা কর!

আপনি কখনও কখনও ব্যবহার করতে পারেনrequire :

var obj = require('path/to/file.json');

তবে, আমি এটি বেশ কয়েকটি কারণে সুপারিশ করি না:

  1. requireসিঙ্ক্রোনাস হয়। আপনার যদি খুব বড় JSON ফাইল থাকে তবে এটি আপনার ইভেন্টের লুপটিকে দমিয়ে দেবে। আপনি সত্যিই ব্যবহার করতে হবে JSON.parseসঙ্গে fs.readFile
  2. requireফাইলটি একবারে পড়বে । requireএকই ফাইলের জন্য পরবর্তী কলগুলি একটি ক্যাশেড অনুলিপি ফিরে আসবে। .jsonঅবিচ্ছিন্নভাবে আপডেট হওয়া কোনও ফাইল আপনি পড়তে চাইলে ভাল ধারণা নয় । আপনি একটি হ্যাক ব্যবহার করতে পারে । তবে এই মুহুর্তে, এটি সহজভাবে ব্যবহার করা সহজ fs
  3. আপনার ফাইলটির যদি কোনও .jsonএক্সটেনশন না থাকে requireতবে ফাইলের সামগ্রীগুলি JSON হিসাবে বিবেচনা করবে না।

সিরিয়াসলি! ব্যবহারJSON.parse


load-json-file মডিউল

আপনি যদি প্রচুর পরিমাণে .jsonফাইল পড়ছেন , (এবং আপনি যদি অত্যন্ত অলস হন) তবে প্রতিবার বয়লারপ্লেট কোড লিখতে বিরক্তিকর হয়ে ওঠে। আপনি load-json-fileমডিউলটি ব্যবহার করে কিছু অক্ষর সংরক্ষণ করতে পারেন ।

const loadJsonFile = require('load-json-file');

অ্যাসিঙ্ক্রোনাস সংস্করণ

loadJsonFile('/path/to/file.json').then(json => {
    // `json` contains the parsed object
});

সিঙ্ক্রোনাস সংস্করণ

let obj = loadJsonFile.sync('/path/to/file.json');

স্ট্রিম থেকে জেএসনকে পার্স করা হচ্ছে

যদি JSON সামগ্রীটি নেটওয়ার্কে প্রবাহিত হয় তবে আপনার স্ট্রিমিং JSON পার্সার ব্যবহার করা দরকার। অন্যথায় এটি আপনার প্রসেসরটিকে বেঁধে রাখবে এবং আপনার ইভেন্ট লুপটিকে জোর করে দিবে যতক্ষণ না জেএসএএন সামগ্রী সম্পূর্ণ প্রবাহিত হয়।

এর জন্য এনপিএমে প্রচুর প্যাকেজ উপলব্ধ রয়েছে । আপনার জন্য সবচেয়ে ভাল কি চয়ন করুন।


সুরক্ষা / সুরক্ষা ত্রুটি

আপনি যদি নিশ্চিত হন না যে যা যা পাস করা হয়েছে JSON.parse()তা বৈধ জেএসওএন কিনা, JSON.parse()কোনও try/catchব্লকের ভিতরে কলটি বন্ধ করে দেওয়ার বিষয়টি নিশ্চিত করুন । কোনও ব্যবহারকারী জাসন স্ট্রিং সরবরাহ করেছে আপনার অ্যাপ্লিকেশন ক্র্যাশ করতে পারে এবং এমনকি সুরক্ষা গর্ত হতে পারে। আপনি বাহ্যিকভাবে সরবরাহিত জেএসএনকে বিশ্লেষণ করলে ত্রুটি পরিচালনার কাজটি নিশ্চিত হয়েছে তা নিশ্চিত করুন।


2
and could even lead to security holesকৌতূহলের বাইরে, কীভাবে?
নটারিও

6
@ ন্যাটারিও: আমরা এখানে সার্ভার-সাইড জেএস সম্পর্কে কথা বলছি। মনে করুন যে কেউ ব্যবহারকারী সরবরাহিত জেএসএনকে পার্স করছে। যদি ধারনাটি হ'ল জেএসএন সর্বদা সুগঠিত থাকে তবে আক্রমণকারী কোনও ত্রুটি ঘটানোর জন্য কিছু ত্রুটিযুক্ত জেএসওন প্রেরণ করতে পারে, যা ক্লায়েন্টের পক্ষ থেকে ছড়িয়ে দেওয়া থাকলে সিস্টেম সম্পর্কে গুরুত্বপূর্ণ তথ্য প্রকাশ করতে পারে। অথবা যদি জেএসওএন উভয়ই <script>...ত্রুটিযুক্ত ছিল এবং এর সাথে কিছু পাঠ্য রয়েছে এবং ত্রুটিটি ক্লায়েন্টের পক্ষে ছড়িয়ে দেওয়া হয়েছে তবে আপনার ঠিক সেখানে একটি এক্সএসএস বাগ রয়েছে। সুতরাং আইএমও জেএসএন ত্রুটিগুলি যেখানে ঠিক সেখানে পার্স করা উচিত তা পরিচালনা করা গুরুত্বপূর্ণ।
সাম্পাথিস্রিস

1
@ নিকস্টিল: তবে, আমি "আমি প্রস্তাব দিই না" "এটিকে" প্রস্তাবিত নয় "পরিবর্তন করেছি। আমি আশা করি আপনি এখন খুশি।
সম্পথিস্রিস

1
@ নিকস্টিল: আমি তালিকাভুক্ত ত্রুটিগুলি দেখে আমি মনে করি এটি একটি ভাল নকশা করা বৈশিষ্ট্য নয়। আমার কাছে দেখে মনে হচ্ছে কিছু লোক ভাবলেন "আরে, requireজেএসওএনকে অন্তর্ভুক্ত করা ভাল নয় কি ?" এমনকি পার্শ্ব প্রতিক্রিয়াগুলি ডকুমেন্ট করতেও বিরক্ত করেননি। এর অর্থ হ'ল দুটি ভাষায় ফাইল গ্রহণ করা দরকার: জাভাস্ক্রিপ্ট এবং জেএসএন (না তারা একই নয়)। এসআরপি-র জন্য এত কিছু।
সাম্পাথিস্রিস

1
@ নিকস্টিল: হ্যাঁ, শুধুমাত্র কনফিগারেশনের জন্য এটি কাজ করে। তবে JSON কেবল কনফিগারেশনের জন্য ব্যবহার করা হয় না।
সাম্পাথিস্রিস

85

JSON অবজেক্টটি ব্যবহার করুন :

JSON.parse(str);

12
এটি কেবল শীর্ষ জলের নকল করে। দয়া করে এটি মুছে ফেলার বিষয়ে বিবেচনা করুন; আপনি পয়েন্ট রাখতে হবে।
ড্যান ড্যাসক্লেস্কু

6
এই উত্তর 50 টি upvotes আছে। 1% নিয়ম অনুসারে , সম্ভবত 5000 টি উত্তর এই উত্তরটি পড়তে সময় ব্যয় করেছে, যা শীর্ষের কোনওটিতেই কিছুই যোগ করে না। এটি 3 বছরের পুরানো সত্যটি সমস্যাটিকে আরও খারাপ করে তোলে :)
ড্যান ড্যাসক্লেস্কু

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

8
আমি এই সিরিজের মন্তব্যে মোটামুটি একটি আকর্ষণীয় পেয়েছি তবে উত্তরটি আমার সময় নষ্ট হতে পারে। ... আমি নিশ্চিত নই যে এর দ্বারা ইঙ্গিত দেওয়া হয়েছে যে উত্তরটি মুছে ফেলা উচিত, কারণ তখন আমি মন্তব্য থ্রেডটি দেখতে পেতাম না। তবে অন্যথায় আমি হ্যাঁ বলব।
ম্যালকম্মিশন

7
@ ড্যানডাসক্লেস্কু, আমি বিশ্বাস করি যে এই উত্তরটি আরও স্পষ্ট এবং সোজা point গৃহীত কোনও ব্যবহারের উদাহরণ দেয় না এবং অনেক লিঙ্ক এবং অতিরিক্ত স্টাফের কারণে বিভ্রান্তিকর হয়।
andresgottlieb

37

JSON.parse এর আরেকটি উদাহরণ:

var fs = require('fs');
var file = __dirname + '/config.json';

fs.readFile(file, 'utf8', function (err, data) {
  if (err) {
    console.log('Error: ' + err);
    return;
  }

  data = JSON.parse(data);

  console.dir(data);
});

2
আমি পছন্দ করি যে এই পদ্ধতির জন্য অ্যাপ্লিকেশনটিতে স্থানীয়ভাবে জসন ফাইলের প্রয়োজন হয় না। ধন্যবাদ!
চার্লস ব্র্যান্ড্ট

35

আমি উল্লেখ করতে চাই যে বিশ্বব্যাপী জেএসএন বস্তুর বিকল্প রয়েছে। JSON.parseএবং JSON.stringifyউভয়ই সিঙ্ক্রোনাস, সুতরাং আপনি যদি বড় বড় অবজেক্টগুলির সাথে ডিল করতে চান তবে আপনি কিছু অ্যাসিনক্রোনাস জেএসএন মডিউল পরীক্ষা করতে চাইতে পারেন।

একবার দেখুন: https://github.com/joyent/node/wiki/Modules#wiki-parsers-json


1
এটি বিশেষত সত্য যদি কেউ আসন্ন সংযোগগুলি থেকে JSON ডেটা প্রত্যাশা করে। যদি JSON.parseআপনার পুরো অ্যাপ্লিকেশনটির দ্বারা ত্রুটিযুক্ত জেএসওনকে বিশ্লেষণ করা হচ্ছে তবে ক্র্যাশ হয়ে যাচ্ছে বা ব্যবহার করা হচ্ছে process.on('uncaughtException', function(err) { ... });, অবশেষে ব্যবহারকারীর কাছে একটি "ত্রুটিযুক্ত জেএসএন" ত্রুটি প্রেরণের কোনও সুযোগ থাকবে না।
পল

3
কোনটি asyncপার্সার? আমি এটি পাইনি।
bxshi

3
লিঙ্কযুক্ত পৃষ্ঠাটি এখন "অবনমিত" হিসাবে চিহ্নিত হয়েছে এবং নিজেকে একটি "বিবর্ণ अवशेष" হিসাবে বর্ণনা করে।
কেউই নয়

30

node-fsগ্রন্থাগারটি অন্তর্ভুক্ত করুন ।

var fs = require("fs");
var file = JSON.parse(fs.readFileSync("./PATH/data.json", "utf8"));

'Fs' গ্রন্থাগার সম্পর্কে আরও তথ্যের জন্য, ডকুমেন্টেশনটি http://nodejs.org/api/fs.htmlদেখুন


2
আপনার জেএসওএন পার্স করতে ব্যর্থ হয় বা ফাইলটির অস্তিত্ব না পাওয়া সেক্ষেত্রে আপনার চেষ্টা করা / ধরার জন্য আপনার ভার ফাইল ফাইলটি আবদ্ধ করা উচিত।
ফোস্টাহ

3
বা কেবল একটি কলব্যাক ব্যবহার করুন!
Lawx

10

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

function tryParseJson(str) {
    try {
        return JSON.parse(str);
    } catch (ex) {
        return null;
    }
}

বা "অ্যাসিঙ্ক স্টাইলে"

function tryParseJson(str, callback) {
    process.nextTick(function () {
      try {
          callback(null, JSON.parse(str));
      } catch (ex) {
          callback(ex)
      }
    })
}

2
আমি কেবল একটি নোট তৈরি করতে চাই যে প্রক্রিয়া.অনেক্সটটিকটি এসিএনসি নয়। এটি জেএস ইভেন্ট লুপের পরবর্তী ফাংশন কল পর্যন্ত ফাইলটি পড়া বন্ধ করে দিচ্ছে। অবিচ্ছিন্নভাবে JSON.parse চালানোর জন্য আপনি মূল নোড.জেএস থ্রেডের চেয়ে আলাদা থ্রেড ব্যবহার করেছেন
আলেকজান্ডার মিলস


7

এখানকার প্রত্যেকে JSON.parse সম্পর্কে বলেছে, তাই আমি অন্য কিছু বলার কথা ভেবেছিলাম। অ্যাপ্লিকেশনগুলির বিকাশ সহজতর ও উন্নত করতে অনেক মিডলওয়্যারের সাথে সংযুক্ত হওয়ার জন্য একটি দুর্দান্ত মডিউল রয়েছে । মিডলওয়্যারের একটি হ'ল বডি পার্সার । এটা তোলে parses তাদেরকে JSON, HTML-ফর্ম এবং ইত্যাদি রয়েছে তাদেরকে JSON এর জন্য কোনো সুনির্দিষ্ট মিডলওয়্যার শুধুমাত্র পার্স হয় noop

উপরের লিঙ্কগুলিতে একবার দেখুন, এটি আপনার পক্ষে সত্যিই সহায়ক হতে পারে।



6

এখানে অন্যান্য উত্তরের হিসাবে উল্লেখ করা হয়েছে, আপনি সম্ভবত একটি কনফিগারেশন ফাইলের মতো স্থানীয় জেসন ফাইলের সুরক্ষিত এবং বর্তমান হিসাবে জানতে চান:

var objectFromRequire = require('path/to/my/config.json'); 

বা কোনও বস্তুর মধ্যে একটি স্ট্রিংয়ের মান পার্স করতে বিশ্বব্যাপী জেএসওএন অবজেক্টটি ব্যবহার করতে:

var stringContainingJson = '\"json that is obtained from somewhere\"';
var objectFromParse = JSON.parse(stringContainingJson);

নোট করুন যে আপনার যখন কোনও ফাইলের প্রয়োজন হয় তখন সেই ফাইলটির সামগ্রীটি মূল্যায়ন করা হয়, এটি কোনও জাসন ফাইল নয় জেএস ফাইলের ক্ষেত্রে সুরক্ষা ঝুঁকির পরিচয় দেয়।

এখানে, আমি একটি ডেমো প্রকাশ করেছি যেখানে আপনি উভয় পদ্ধতি দেখতে এবং সেগুলির সাথে অনলাইনে খেলতে পারবেন (পার্সিং উদাহরণটি অ্যাপ্লিকেশন ফাইলের মধ্যে রয়েছে - তারপরে রান বোতামে ক্লিক করুন এবং ফলাফলটি টার্মিনালে দেখুন): http: // staging1 .codefresh.io / ল্যাবস / API / env / JSON-পার্স-উদাহরণস্বরূপ

আপনি কোডটি পরিবর্তন করতে পারেন এবং এর প্রভাবটি দেখতে পারেন ...


5

Node.js এর সাথে আপনার কনফিগারেশনের জন্য JSON ব্যবহার করছেন? এটি পড়ুন এবং আপনার কনফিগারেশন দক্ষতা 9000 এরও বেশি পান ...

দ্রষ্টব্য: লোকেরা দাবি করে যে ডেটা = প্রয়োজন ('./ ডেটা.জসন'); একটি সুরক্ষা ঝুঁকি এবং উত্সাহী উদ্যোগের সাথে জনগণের জবাবগুলি হ্রাস করা: আপনি ঠিক এবং সম্পূর্ণ ভুল । যে ফাইল অ তাদেরকে JSON স্থাপন করার চেষ্টা করুন ... নোড আপনি একটি ত্রুটি দেবে ঠিক আপনি সঙ্গে একই জিনিস করেনি এটি হবে মত অনেক কোড ম্যানুয়াল ফাইলটি পড়ার ধীর এবং কঠিন এবং তারপর পরবর্তী JSON.parse ()। ভুল তথ্য ছড়ানো বন্ধ করুন; আপনি বিশ্বকে আঘাত করছেন, সাহায্য করছেন না। নোড এটির জন্য ডিজাইন করা হয়েছিল ; এটি কোনও সুরক্ষা ঝুঁকি নয়!

যথাযথ অ্যাপ্লিকেশনগুলি কনফিগারেশনের 3+ স্তরে আসে :

  1. সার্ভার / ধারক কনফিগার করুন
  2. অ্যাপ্লিকেশন কনফিগার
  3. (alচ্ছিক) ভাড়াটে / সম্প্রদায় / সংস্থা কনফিগারেশন
  4. ব্যবহারকারী কনফিগার

বেশিরভাগ বিকাশকারী তাদের সার্ভার এবং অ্যাপ্লিকেশন কনফিগারেশনটিকে এমনভাবে ব্যবহার করে যেন এটি পরিবর্তন করতে পারে। এটা পারে না। আপনি একে অপরের উপরে উচ্চ স্তর থেকে পরিবর্তনগুলি স্তর করতে পারেন তবে আপনি বেস প্রয়োজনীয়তাগুলি সংশোধন করছেন । কিছু জিনিস থাকা প্রয়োজন ! আপনার কনফিগারেশনটিকে এটি অপরিবর্তনীয় মতো কাজ করুন কারণ এর কিছুটি মূলত আপনার উত্স কোডের মতো।

প্রারম্ভকালে আপনার প্রচুর স্টাফ পরিবর্তন হবে না তা দেখতে ব্যর্থ হওয়া আপনার চেস্টা / ক্যাচ ব্লক দিয়ে আপনার কনফিগার লোডে লিটারিং করা এবং আপনার সঠিকভাবে সেটআপ অ্যাপ্লিকেশন ছাড়াই চালিয়ে যেতে পারে এমন ভান করে anti আপনি পারবেন না। আপনি যদি এটি করতে পারেন তবে এটি সম্প্রদায় / ব্যবহারকারী কনফিগারেশন স্তরের অন্তর্ভুক্ত, সার্ভার / অ্যাপ কনফিগারেশন স্তর নয়। আপনি ঠিক এটি ভুল করছেন। অ্যাপ্লিকেশনটি বুটস্ট্র্যাপ শেষ হলে topচ্ছিক জিনিসগুলি উপরে স্তরযুক্ত করা উচিত।

দেয়ালের বিরুদ্ধে মাথা ঠেকানো বন্ধ করুন: আপনার কনফিগারটি অতি সাধারণ হওয়া উচিত ।

একটি সাধারণ জসন কনফিগারেশন ফাইল এবং সরল অ্যাপ.জেএস ফাইল ব্যবহার করে একটি প্রোটোকল-অজোনস্টিক এবং ডেটাসোর্স-অজ্ঞেস্টিক পরিষেবা কাঠামোর মতো জটিল কিছু সেটআপ করা কত সহজ তা একবার দেখুন ...

ধারক-config.js ...

{
    "service": {
        "type"  : "http",
        "name"  : "login",
        "port"  : 8085
    },
    "data": {
        "type"  : "mysql",
        "host"  : "localhost",
        "user"  : "notRoot",
        "pass"  : "oober1337",
        "name"  : "connect"
    }
}

index.js ... (ইঞ্জিন যা সমস্ত কিছুকে শক্তি দেয়)

var config      = require('./container-config.json');       // Get our service configuration.
var data        = require(config.data.type);            // Load our data source plugin ('npm install mysql' for mysql).
var service     = require(config.service.type);         // Load our service plugin ('http' is built-in to node).
var processor   = require('./app.js');                  // Load our processor (the code you write).

var connection  = data.createConnection({ host: config.data.host, user: config.data.user, password: config.data.pass, database: config.data.name });
var server      = service.createServer(processor);
connection.connect();
server.listen(config.service.port, function() { console.log("%s service listening on port %s", config.service.type, config.service.port); });

app.js ... (কোড যা আপনার প্রোটোকল- অজোনস্টিক এবং ডেটা উত্স অজোনস্টিক পরিষেবাকে শক্তি দেয়)

module.exports = function(request, response){
    response.end('Responding to: ' + request.url);
}

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

কারণ আপনি স্তর ব্যবহার করছেন, সব কিছুর জন্য সত্যের একটি একক উৎস উপর, যে কোনো সময় (স্তরপূর্ণ কনফিগ বস্তুর) প্রতি পদে পদে এড়ানোর ত্রুটি চেক নির্ভর করতে পারেন, এবং, সম্পর্কে "উহু বিষ্ঠা, কিভাবে আমি যাচ্ছি উদ্বেজক এই সঠিক কনফিগারেশন ছাড়া কাজ?!? "।


4

আমার সমাধান:

var fs = require('fs');
var file = __dirname + '/config.json';

fs.readFile(file, 'utf8', function (err, data) {
    if (err) {
        console.log('Error: ' + err);
        return;
    }

    data = JSON.parse(data);

    console.dir(data);
});

ধন্যবাদ @ এলয়েইএসপ, আমি এই কোডটি ব্যবহার করার চেষ্টা করেছি তবে আমি TypeError: path must be a string or Bufferত্রুটি পেতেই থাকি - এই সমস্যাটি কোথায় ডিবাগ করা শুরু করবেন কোনও ধারণা?
জিপিপি

4

শুধু উত্তরটি সম্পূর্ণ করতে চাই (যেমন আমি এটির সাথে কিছুক্ষণ লড়াই করেছি), কীভাবে জসন তথ্য অ্যাক্সেস করতে হয় তা দেখাতে চাই, উদাহরণটি জসন অ্যারে অ্যাক্সেস করে দেখায়:

var request = require('request');
request('https://server/run?oper=get_groups_joined_by_user_id&user_id=5111298845048832', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    var jsonArr = JSON.parse(body);
    console.log(jsonArr);
    console.log("group id:" + jsonArr[0].id);
  }
})


3

এটি এটিকে যতটা সম্ভব জটিল করা এবং যতটা সম্ভব প্যাকেজ আনতে ...

const fs = require('fs');
const bluebird = require('bluebird');
const _ = require('lodash');
const readTextFile = _.partial(bluebird.promisify(fs.readFile), _, {encoding:'utf8',flag:'r'});
const readJsonFile = filename => readTextFile(filename).then(JSON.parse);

এটি আপনাকে করতে দেয়:

var dataPromise = readJsonFile("foo.json");
dataPromise.then(console.log);

অথবা আপনি যদি async ব্যবহার করছেন / অপেক্ষা করুন:

let data = await readJsonFile("foo.json");

কেবলমাত্র ব্যবহার করার সুবিধাটি readFileSyncহ'ল ফাইলটি ডিস্কের বাইরে পড়ার সময় আপনার নোড সার্ভার অন্যান্য অনুরোধগুলি প্রক্রিয়া করতে পারে।


2

JSON.parse আপনি পার্সিং করছেন এমন জেসন স্ট্রিংয়ের সুরক্ষা নিশ্চিত করবে না। আপনার জাসন-সেফ-পার্স বা অনুরূপ লাইব্রেরির মতো লাইব্রেরিটি দেখতে হবে।

জসন-সেফ-পার্স এনপিএম পৃষ্ঠা থেকে:

JSON.parse দুর্দান্ত, তবে জাভাস্ক্রিপ্টের প্রসঙ্গে এটির একটি গুরুতর ত্রুটি রয়েছে: এটি আপনাকে উত্তরাধিকার সূত্রে প্রাপ্ত বৈশিষ্ট্যগুলিকে ওভাররাইড করতে দেয়। আপনি যদি কোনও অবিশ্বস্ত উত্স (যেমন: একজন ব্যবহারকারী) থেকে জেএসএনকে পার্সিং করে এবং এটিতে ফাংশনগুলি কল করে আপনার উপস্থিতি প্রত্যাশা করে তবে এটি একটি ইস্যুতে পরিণত হতে পারে।


2

লিভারেজ লোডাসের একটি ত্রুটিযুক্ত বস্তু ফিরিয়ে দেওয়ার প্রচেষ্টা ফাংশন, যা আপনি ইসরার ফাংশনটির সাহায্যে পরিচালনা করতে পারেন।

// Returns an error object on failure
function parseJSON(jsonString) {
   return _.attempt(JSON.parse.bind(null, jsonString));
}


// Example Usage
var goodJson = '{"id":123}';
var badJson = '{id:123}';
var goodResult = parseJSON(goodJson);
var badResult = parseJSON(badJson);

if (_.isError(goodResult)) {
   console.log('goodResult: handle error');
} else {
   console.log('goodResult: continue processing');
}
// > goodResult: continue processing

if (_.isError(badResult)) {
   console.log('badResult: handle error');
} else {
   console.log('badResult: continue processing');
}
// > badResult: handle error

3
আপনি .bindকেবল _.attempt (JSON.parse, str) এর পরিবর্তে কেন যুক্ত করেছেন তা ব্যাখ্যা করতে পারেন
স্টিভিজাই

2

সর্বদা JSON.parse ব্যবহারের চেষ্টা ব্লক ব্যবহার করা নিশ্চিত করুন কারণ নোড সর্বদা একটি অপ্রত্যাশিত ত্রুটি ফেলে দেয় যদি আপনার জসনে কিছু দূষিত ডেটা থাকে তবে সাধারণ JSON এর পরিবর্তে এই কোডটি ব্যবহার করুন P পার্স

try{
     JSON.parse(data)
}
catch(e){
   throw new Error("data is corrupted")
  }

1

আপনি যদি আপনার জেএসএন-তে কিছু মন্তব্য যুক্ত করতে চান এবং অনুসরণের কমাতে অনুমতি দিতে পারেন তবে নীচে প্রয়োগের প্রয়োজন হতে পারে:

var fs = require('fs');

var data = parseJsData('./message.json');

console.log('[INFO] data:', data);

function parseJsData(filename) {
    var json = fs.readFileSync(filename, 'utf8')
        .replace(/\s*\/\/.+/g, '')
        .replace(/,(\s*\})/g, '}')
    ;
    return JSON.parse(json);
}

মনে রাখবেন যে "abc": "foo // bar"আপনার জেএসএনের মতো কিছু থাকলে এটি ভাল কাজ করতে পারে না । তাই ওয়াইএমএমভি।


1

যদি জেএসএন উত্স ফাইলটি বেশ বড় হয় তবে নীচে অ্যাসিঙ্কের মাধ্যমে অ্যাসিঙ্ক্রোনাস রুটটি বিবেচনা করতে / নোড.জেএস .0.০ এর সাথে যোগাযোগের জন্য অপেক্ষা করতে পারে

const fs = require('fs')

const fsReadFile = (fileName) => {
    fileName = `${__dirname}/${fileName}`
    return new Promise((resolve, reject) => {
        fs.readFile(fileName, 'utf8', (error, data) => {
            if (!error && data) {
                resolve(data)
            } else {
                reject(error);
            }
        });
    })
}

async function parseJSON(fileName) {
    try {
        return JSON.parse(await fsReadFile(fileName));
    } catch (err) {
        return { Error: `Something has gone wrong: ${err}` };
    }
}

parseJSON('veryBigFile.json')
    .then(res => console.log(res))
    .catch(err => console.log(err))

1

আমি fs- অতিরিক্ত ব্যবহার । আমি এটি অনেক পছন্দ করি কারণ - এটি কলব্যাক্সকে সমর্থন করে Prom এটি প্রতিশ্রুতিগুলিকেও সমর্থন করে । সুতরাং এটি কেবল আমার কোডটি আরও বেশি পঠনযোগ্য উপায়ে লিখতে সক্ষম করে:

const fs = require('fs-extra');
fs.readJson("path/to/foo.json").then(obj => {
    //Do dome stuff with obj
})
.catch(err => {
    console.error(err);
});

এটা অনেক দরকারী পদ্ধতি বরাবর যা মান আসে না হয়েছে fsমডিউল এবং যে উপরে, এটি নেটিভ থেকে পদ্ধতি সেতু fsমডিউল এবং তাদের promisifies।

দ্রষ্টব্য: আপনি এখনও স্থানীয় নোড.জেএস পদ্ধতি ব্যবহার করতে পারেন। সেগুলি এফএস-এক্সট্রাতে প্রমিজড এবং অনুলিপি করা হয়। fs.read()& এ নোটগুলি দেখুনfs.write()

সুতরাং এটি মূলত সমস্ত সুবিধা। আমি আশা করি অন্যরাও এটি দরকারী বলে মনে করেন।


1

যদি আপনার কোনও সুরক্ষিত উপায়ে নোড.জেএস এর সাথে জেএসনকে পার্স করা দরকার হয় (যেমন: ব্যবহারকারী ডেটা বা কোনও পাবলিক এপিআই ইনপুট করতে পারে) তবে আমি নিরাপদ-জসন-পার্স ব্যবহার করার পরামর্শ দেব ।

ব্যবহারটি ডিফল্টের মতো JSON.parseতবে এটি আপনার কোডটিকে এ থেকে রক্ষা করবে:

const badJson = '{ "a": 5, "b": 6, "__proto__": { "x": 7 }, "constructor": {"prototype": {"bar": "baz"} } }'

const infected = JSON.parse(badJson)
console.log(infected.x) // print undefined

const x = Object.assign({}, infected)
console.log(x.x) // print 7

const sjson = require('secure-json-parse')
console.log(sjson.parse(badJson)) // it will throw by default, you can ignore malicious data also

0

আপনি JSON.parse () ব্যবহার করতে পারেন (যা একটি বিল্ট ইন ফাংশন যা সম্ভবত আপনাকে এটিকে ট্রাই-ক্যাচ স্টেটমেন্ট দিয়ে মোড়ানো করতে বাধ্য করবে)।

অথবা কিছু জেএসএন পার্সিং এনপিএম লাইব্রেরি, জেসন পার্স-বা কিছু ব্যবহার করুন



0

নোডজেস একটি জাভাস্ক্রিপ্ট ভিত্তিক সার্ভার, তাই আপনি খাঁটি জাভাস্ক্রিপ্টে যেভাবে করতে পারেন তা করতে পারেন ...

কল্পনা করুন আপনি এই আছে JSON মধ্যে NodeJs ...

var details = '{ "name": "Alireza Dezfoolian", "netWorth": "$0" }';
var obj = JSON.parse(details);

এবং আপনি আপনার জসনের একটি পার্সড সংস্করণ পেতে উপরের কাজটি করতে পারেন ...


0

উপরের উত্তরে উল্লিখিত হিসাবে, আমরা JSON.parse()জেএসএন-তে স্ট্রিংগুলি পার্স করতে ব্যবহার করতে পারি তবে পার্সিংয়ের আগে সঠিক ডেটা পার্স করতে ভুলবেন না অন্যথায় এটি আপনার পুরো অ্যাপ্লিকেশনটিকে নীচে নামিয়ে আনতে পারে

এটি এটির মতো ব্যবহার করা নিরাপদ

let parsedObj = {}
try {
    parsedObj = JSON.parse(data);
} catch(e) {
    console.log("Cannot parse because data is not is proper json format")
}

0

ব্যবহার JSON.parse(str);। এটি সম্পর্কে এখানে আরও পড়ুন ।

এখানে কিছু উদাহরন:

var jsonStr = '{"result":true, "count":42}';

obj = JSON.parse(jsonStr);

console.log(obj.count);    // expected output: 42
console.log(obj.result);   // expected output: true

-1

আর কোনও মডিউল প্রয়োজন হয় না।
আমি ব্যবহার
var parsedObj = JSON.parse(yourObj);
করি না মনে করি এই সম্পর্কিত কোনও সুরক্ষা সমস্যা আছে


-2

এটা সহজ, আপনি তাদেরকে JSON ব্যবহার স্ট্রিং রূপান্তর করতে পারেন JSON.stringify(json_obj), এবং ধর্মান্তরিত স্ট্রিং তাদেরকে JSON ব্যবহার JSON.parse("your json string")


2
আপনি কি এই প্রশ্নের শীর্ষের উত্তরটি দেখেছেন? এটি 3 বছরের পুরানো এবং খুব সম্পূর্ণ। আপনি এখানে যে তুচ্ছ তথ্য সরবরাহ করছেন তাতে অবদান রাখার জন্য কী আশা করেছিলেন?
রবি কর্নেলিসসেন

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