নোড.জেএস ব্যবহার করে জেএসএনকে কীভাবে পার্স করা উচিত? এমন কিছু মডিউল আছে যা JSON কে নিরাপদে যাচাই করবে এবং পার্স করবে?
নোড.জেএস ব্যবহার করে জেএসএনকে কীভাবে পার্স করা উচিত? এমন কিছু মডিউল আছে যা JSON কে নিরাপদে যাচাই করবে এবং পার্স করবে?
উত্তর:
আপনি সহজভাবে ব্যবহার করতে পারেন JSON.parse
।
JSON
অবজেক্টের সংজ্ঞা ECMAScript 5 স্পেসিফিকেশনের অংশ । নোড.জেএস গুগল ক্রোমের ভি 8 ইঞ্জিনে নির্মিত, যা ইসিএমএ স্ট্যান্ডার্ডকে মেনে চলে। সুতরাং, নোড.জেএস এর একটি বিশ্বব্যাপী অবজেক্ট [ডক্স ]ও রয়েছে ।JSON
দ্রষ্টব্য - JSON.parse
বর্তমান থ্রেডটি বেঁধে রাখতে পারে কারণ এটি একটি সিঙ্ক্রোনাস পদ্ধতি। সুতরাং আপনি যদি বড় JSON অবজেক্টকে বিশ্লেষণ করার পরিকল্পনা করছেন তবে স্ট্রিমিং জসন পার্সার ব্যবহার করুন।
আপনার .json ফাইলের প্রয়োজন হতে পারে ।
var parsedJSON = require('./file-name');
উদাহরণস্বরূপ, যদি config.json
আপনার উত্স কোড ফাইলের মতো একই ডিরেক্টরিতে কোনও ফাইল থাকে তবে আপনি ব্যবহার করতে পারেন:
var config = require('./config.json');
বা (ফাইল এক্সটেনশন বাদ দেওয়া যেতে পারে):
var config = require('./config');
দয়া করে মনে রাখবেন require
হয় সমকালীন এবং শুধুমাত্র ফাইল সার্চ একবার , নিম্নলিখিত কল ক্যাশে থেকে ফলাফলের আসতে
এছাড়াও মনে রাখবেন যে এটি কেবল আপনার পরম নিয়ন্ত্রণের অধীনে স্থানীয় ফাইলগুলির জন্য ব্যবহার করা উচিত, কারণ এটি ফাইলের মধ্যে কোনও কোড কার্যকরভাবে কার্যকর করে।
require
সিঙ্ক্রোনাস Note আপনি যদি এর fs.readFile
পরিবর্তে বন্ধুত্বপূর্ণ ব্যবহারটি async করতে চানJSON.parse
.json
এক্সটেনশনটি ব্যবহার করতে ভুলবেন না ! যদি আপনার ফাইলটির .json
এক্সটেনশন না থাকে , প্রয়োজনে এটি কোনও জসন ফাইল হিসাবে বিবেচনা করবে না।
আপনি ব্যবহার করতে পারেনJSON.parse()
।
আপনার JSON
যেকোন ECMAScript 5 সামঞ্জস্যপূর্ণ জাভাস্ক্রিপ্ট প্রয়োগে অবজেক্টটি ব্যবহার করতে সক্ষম হওয়া উচিত । এবং ভি 8 , যার উপরে নোড.জেস নির্মিত হয়েছে সেগুলির মধ্যে একটি।
দ্রষ্টব্য: আপনি যদি সংবেদনশীল তথ্য (যেমন পাসওয়ার্ড) সঞ্চয় করতে কোনও JSON ফাইল ব্যবহার করেন তবে এটি করার এটি ভুল উপায় way হেরোকু এটি কী করে তা দেখুন: https://devcenter.heroku.com/articles/config-vars#setting-up-config-vars-for-a-dep কাজের- অ্যাপ্লিকেশন । আপনার প্ল্যাটফর্মটি এটি কী করে তা সন্ধান করুন এবং
process.env
কোডের মধ্যে থেকে কনফিগারেশন ভারগুলি পুনরুদ্ধার করতে ব্যবহার করুন ।
var str = '{ "name": "John Doe", "age": 42 }';
var obj = JSON.parse(str);
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');
তবে, আমি এটি বেশ কয়েকটি কারণে সুপারিশ করি না:
require
সিঙ্ক্রোনাস হয়। আপনার যদি খুব বড় JSON ফাইল থাকে তবে এটি আপনার ইভেন্টের লুপটিকে দমিয়ে দেবে। আপনি সত্যিই ব্যবহার করতে হবে JSON.parse
সঙ্গে fs.readFile
।require
ফাইলটি একবারে পড়বে । require
একই ফাইলের জন্য পরবর্তী কলগুলি একটি ক্যাশেড অনুলিপি ফিরে আসবে। .json
অবিচ্ছিন্নভাবে আপডেট হওয়া কোনও ফাইল আপনি পড়তে চাইলে ভাল ধারণা নয় । আপনি একটি হ্যাক ব্যবহার করতে পারে । তবে এই মুহুর্তে, এটি সহজভাবে ব্যবহার করা সহজ fs
।.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
ব্লকের ভিতরে কলটি বন্ধ করে দেওয়ার বিষয়টি নিশ্চিত করুন । কোনও ব্যবহারকারী জাসন স্ট্রিং সরবরাহ করেছে আপনার অ্যাপ্লিকেশন ক্র্যাশ করতে পারে এবং এমনকি সুরক্ষা গর্ত হতে পারে। আপনি বাহ্যিকভাবে সরবরাহিত জেএসএনকে বিশ্লেষণ করলে ত্রুটি পরিচালনার কাজটি নিশ্চিত হয়েছে তা নিশ্চিত করুন।
and could even lead to security holes
কৌতূহলের বাইরে, কীভাবে?
<script>...
ত্রুটিযুক্ত ছিল এবং এর সাথে কিছু পাঠ্য রয়েছে এবং ত্রুটিটি ক্লায়েন্টের পক্ষে ছড়িয়ে দেওয়া হয়েছে তবে আপনার ঠিক সেখানে একটি এক্সএসএস বাগ রয়েছে। সুতরাং আইএমও জেএসএন ত্রুটিগুলি যেখানে ঠিক সেখানে পার্স করা উচিত তা পরিচালনা করা গুরুত্বপূর্ণ।
require
জেএসওএনকে অন্তর্ভুক্ত করা ভাল নয় কি ?" এমনকি পার্শ্ব প্রতিক্রিয়াগুলি ডকুমেন্ট করতেও বিরক্ত করেননি। এর অর্থ হ'ল দুটি ভাষায় ফাইল গ্রহণ করা দরকার: জাভাস্ক্রিপ্ট এবং জেএসএন (না তারা একই নয়)। এসআরপি-র জন্য এত কিছু।
JSON অবজেক্টটি ব্যবহার করুন :
JSON.parse(str);
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);
});
আমি উল্লেখ করতে চাই যে বিশ্বব্যাপী জেএসএন বস্তুর বিকল্প রয়েছে।
JSON.parse
এবং JSON.stringify
উভয়ই সিঙ্ক্রোনাস, সুতরাং আপনি যদি বড় বড় অবজেক্টগুলির সাথে ডিল করতে চান তবে আপনি কিছু অ্যাসিনক্রোনাস জেএসএন মডিউল পরীক্ষা করতে চাইতে পারেন।
একবার দেখুন: https://github.com/joyent/node/wiki/Modules#wiki-parsers-json
JSON.parse
আপনার পুরো অ্যাপ্লিকেশনটির দ্বারা ত্রুটিযুক্ত জেএসওনকে বিশ্লেষণ করা হচ্ছে তবে ক্র্যাশ হয়ে যাচ্ছে বা ব্যবহার করা হচ্ছে process.on('uncaughtException', function(err) { ... });
, অবশেষে ব্যবহারকারীর কাছে একটি "ত্রুটিযুক্ত জেএসএন" ত্রুটি প্রেরণের কোনও সুযোগ থাকবে না।
async
পার্সার? আমি এটি পাইনি।
node-fs
গ্রন্থাগারটি অন্তর্ভুক্ত করুন ।
var fs = require("fs");
var file = JSON.parse(fs.readFileSync("./PATH/data.json", "utf8"));
'Fs' গ্রন্থাগার সম্পর্কে আরও তথ্যের জন্য, ডকুমেন্টেশনটি http://nodejs.org/api/fs.html এ দেখুন
যেহেতু আপনি জানেন না যে আপনার স্ট্রিংটি আসলে বৈধ। তাই আমি এটিকে প্রথমে চেষ্টা করার চেষ্টা করব। এছাড়াও যেহেতু চেষ্টা করুন ব্লকগুলি নোড দ্বারা অনুকূলিত হয় না, তাই আমি পুরো জিনিসটি অন্য ফাংশনে রাখি:
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)
}
})
}
একটি JSON স্ট্রিম পার্সিং করছেন? ব্যবহার JSONStream
।
var request = require('request')
, JSONStream = require('JSONStream')
request({url: 'http://isaacs.couchone.com/registry/_all_docs'})
.pipe(JSONStream.parse('rows.*'))
.pipe(es.mapSync(function (data) {
return data
}))
এখানকার প্রত্যেকে JSON.parse সম্পর্কে বলেছে, তাই আমি অন্য কিছু বলার কথা ভেবেছিলাম। অ্যাপ্লিকেশনগুলির বিকাশ সহজতর ও উন্নত করতে অনেক মিডলওয়্যারের সাথে সংযুক্ত হওয়ার জন্য একটি দুর্দান্ত মডিউল রয়েছে । মিডলওয়্যারের একটি হ'ল বডি পার্সার । এটা তোলে parses তাদেরকে JSON, HTML-ফর্ম এবং ইত্যাদি রয়েছে তাদেরকে JSON এর জন্য কোনো সুনির্দিষ্ট মিডলওয়্যার শুধুমাত্র পার্স হয় noop ।
উপরের লিঙ্কগুলিতে একবার দেখুন, এটি আপনার পক্ষে সত্যিই সহায়ক হতে পারে।
JSON.parse("your string");
এখানেই শেষ.
এখানে অন্যান্য উত্তরের হিসাবে উল্লেখ করা হয়েছে, আপনি সম্ভবত একটি কনফিগারেশন ফাইলের মতো স্থানীয় জেসন ফাইলের সুরক্ষিত এবং বর্তমান হিসাবে জানতে চান:
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-পার্স-উদাহরণস্বরূপ
আপনি কোডটি পরিবর্তন করতে পারেন এবং এর প্রভাবটি দেখতে পারেন ...
Node.js এর সাথে আপনার কনফিগারেশনের জন্য JSON ব্যবহার করছেন? এটি পড়ুন এবং আপনার কনফিগারেশন দক্ষতা 9000 এরও বেশি পান ...
দ্রষ্টব্য: লোকেরা দাবি করে যে ডেটা = প্রয়োজন ('./ ডেটা.জসন'); একটি সুরক্ষা ঝুঁকি এবং উত্সাহী উদ্যোগের সাথে জনগণের জবাবগুলি হ্রাস করা: আপনি ঠিক এবং সম্পূর্ণ ভুল । যে ফাইল অ তাদেরকে JSON স্থাপন করার চেষ্টা করুন ... নোড আপনি একটি ত্রুটি দেবে ঠিক আপনি সঙ্গে একই জিনিস করেনি এটি হবে মত অনেক কোড ম্যানুয়াল ফাইলটি পড়ার ধীর এবং কঠিন এবং তারপর পরবর্তী JSON.parse ()। ভুল তথ্য ছড়ানো বন্ধ করুন; আপনি বিশ্বকে আঘাত করছেন, সাহায্য করছেন না। নোড এটির জন্য ডিজাইন করা হয়েছিল ; এটি কোনও সুরক্ষা ঝুঁকি নয়!
যথাযথ অ্যাপ্লিকেশনগুলি কনফিগারেশনের 3+ স্তরে আসে :
বেশিরভাগ বিকাশকারী তাদের সার্ভার এবং অ্যাপ্লিকেশন কনফিগারেশনটিকে এমনভাবে ব্যবহার করে যেন এটি পরিবর্তন করতে পারে। এটা পারে না। আপনি একে অপরের উপরে উচ্চ স্তর থেকে পরিবর্তনগুলি স্তর করতে পারেন তবে আপনি বেস প্রয়োজনীয়তাগুলি সংশোধন করছেন । কিছু জিনিস থাকা প্রয়োজন ! আপনার কনফিগারেশনটিকে এটি অপরিবর্তনীয় মতো কাজ করুন কারণ এর কিছুটি মূলত আপনার উত্স কোডের মতো।
প্রারম্ভকালে আপনার প্রচুর স্টাফ পরিবর্তন হবে না তা দেখতে ব্যর্থ হওয়া আপনার চেস্টা / ক্যাচ ব্লক দিয়ে আপনার কনফিগার লোডে লিটারিং করা এবং আপনার সঠিকভাবে সেটআপ অ্যাপ্লিকেশন ছাড়াই চালিয়ে যেতে পারে এমন ভান করে 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
কারণ আপনি স্তর ব্যবহার করছেন, সব কিছুর জন্য সত্যের একটি একক উৎস উপর, যে কোনো সময় (স্তরপূর্ণ কনফিগ বস্তুর) প্রতি পদে পদে এড়ানোর ত্রুটি চেক নির্ভর করতে পারেন, এবং, সম্পর্কে "উহু বিষ্ঠা, কিভাবে আমি যাচ্ছি উদ্বেজক এই সঠিক কনফিগারেশন ছাড়া কাজ?!? "।
আমার সমাধান:
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
ত্রুটি পেতেই থাকি - এই সমস্যাটি কোথায় ডিবাগ করা শুরু করবেন কোনও ধারণা?
শুধু উত্তরটি সম্পূর্ণ করতে চাই (যেমন আমি এটির সাথে কিছুক্ষণ লড়াই করেছি), কীভাবে জসন তথ্য অ্যাক্সেস করতে হয় তা দেখাতে চাই, উদাহরণটি জসন অ্যারে অ্যাক্সেস করে দেখায়:
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);
}
})
এটি এটিকে যতটা সম্ভব জটিল করা এবং যতটা সম্ভব প্যাকেজ আনতে ...
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
হ'ল ফাইলটি ডিস্কের বাইরে পড়ার সময় আপনার নোড সার্ভার অন্যান্য অনুরোধগুলি প্রক্রিয়া করতে পারে।
JSON.parse আপনি পার্সিং করছেন এমন জেসন স্ট্রিংয়ের সুরক্ষা নিশ্চিত করবে না। আপনার জাসন-সেফ-পার্স বা অনুরূপ লাইব্রেরির মতো লাইব্রেরিটি দেখতে হবে।
জসন-সেফ-পার্স এনপিএম পৃষ্ঠা থেকে:
JSON.parse দুর্দান্ত, তবে জাভাস্ক্রিপ্টের প্রসঙ্গে এটির একটি গুরুতর ত্রুটি রয়েছে: এটি আপনাকে উত্তরাধিকার সূত্রে প্রাপ্ত বৈশিষ্ট্যগুলিকে ওভাররাইড করতে দেয়। আপনি যদি কোনও অবিশ্বস্ত উত্স (যেমন: একজন ব্যবহারকারী) থেকে জেএসএনকে পার্সিং করে এবং এটিতে ফাংশনগুলি কল করে আপনার উপস্থিতি প্রত্যাশা করে তবে এটি একটি ইস্যুতে পরিণত হতে পারে।
লিভারেজ লোডাসের একটি ত্রুটিযুক্ত বস্তু ফিরিয়ে দেওয়ার প্রচেষ্টা ফাংশন, যা আপনি ইসরার ফাংশনটির সাহায্যে পরিচালনা করতে পারেন।
// 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
.bind
কেবল _.attempt (JSON.parse, str) এর পরিবর্তে কেন যুক্ত করেছেন তা ব্যাখ্যা করতে পারেন
সর্বদা JSON.parse ব্যবহারের চেষ্টা ব্লক ব্যবহার করা নিশ্চিত করুন কারণ নোড সর্বদা একটি অপ্রত্যাশিত ত্রুটি ফেলে দেয় যদি আপনার জসনে কিছু দূষিত ডেটা থাকে তবে সাধারণ JSON এর পরিবর্তে এই কোডটি ব্যবহার করুন P পার্স
try{
JSON.parse(data)
}
catch(e){
throw new Error("data is corrupted")
}
আপনি যদি আপনার জেএসএন-তে কিছু মন্তব্য যুক্ত করতে চান এবং অনুসরণের কমাতে অনুমতি দিতে পারেন তবে নীচে প্রয়োগের প্রয়োজন হতে পারে:
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"
আপনার জেএসএনের মতো কিছু থাকলে এটি ভাল কাজ করতে পারে না । তাই ওয়াইএমএমভি।
যদি জেএসএন উত্স ফাইলটি বেশ বড় হয় তবে নীচে অ্যাসিঙ্কের মাধ্যমে অ্যাসিঙ্ক্রোনাস রুটটি বিবেচনা করতে / নোড.জেএস .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))
আমি 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()
সুতরাং এটি মূলত সমস্ত সুবিধা। আমি আশা করি অন্যরাও এটি দরকারী বলে মনে করেন।
যদি আপনার কোনও সুরক্ষিত উপায়ে নোড.জেএস এর সাথে জেএসনকে পার্স করা দরকার হয় (যেমন: ব্যবহারকারী ডেটা বা কোনও পাবলিক এপিআই ইনপুট করতে পারে) তবে আমি নিরাপদ-জসন-পার্স ব্যবহার করার পরামর্শ দেব ।
ব্যবহারটি ডিফল্টের মতো 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
আপনি JSON.parse () ব্যবহার করতে পারেন (যা একটি বিল্ট ইন ফাংশন যা সম্ভবত আপনাকে এটিকে ট্রাই-ক্যাচ স্টেটমেন্ট দিয়ে মোড়ানো করতে বাধ্য করবে)।
অথবা কিছু জেএসএন পার্সিং এনপিএম লাইব্রেরি, জেসন পার্স-বা কিছু ব্যবহার করুন
নিরাপদ দিকে থাকতে এটি ব্যবহার করুন
var data = JSON.parse(Buffer.concat(arr).toString());
নোডজেস একটি জাভাস্ক্রিপ্ট ভিত্তিক সার্ভার, তাই আপনি খাঁটি জাভাস্ক্রিপ্টে যেভাবে করতে পারেন তা করতে পারেন ...
কল্পনা করুন আপনি এই আছে JSON মধ্যে NodeJs ...
var details = '{ "name": "Alireza Dezfoolian", "netWorth": "$0" }';
var obj = JSON.parse(details);
এবং আপনি আপনার জসনের একটি পার্সড সংস্করণ পেতে উপরের কাজটি করতে পারেন ...
উপরের উত্তরে উল্লিখিত হিসাবে, আমরা JSON.parse()
জেএসএন-তে স্ট্রিংগুলি পার্স করতে ব্যবহার করতে পারি তবে পার্সিংয়ের আগে সঠিক ডেটা পার্স করতে ভুলবেন না অন্যথায় এটি আপনার পুরো অ্যাপ্লিকেশনটিকে নীচে নামিয়ে আনতে পারে
এটি এটির মতো ব্যবহার করা নিরাপদ
let parsedObj = {}
try {
parsedObj = JSON.parse(data);
} catch(e) {
console.log("Cannot parse because data is not is proper json format")
}
ব্যবহার 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
এটা সহজ, আপনি তাদেরকে JSON ব্যবহার স্ট্রিং রূপান্তর করতে পারেন JSON.stringify(json_obj)
, এবং ধর্মান্তরিত স্ট্রিং তাদেরকে JSON ব্যবহার JSON.parse("your json string")
।