Node.js භාවිතයෙන් JSON විග්‍රහ කරන්නේ කෙසේද?


983

Node.js භාවිතයෙන් මම JSON විග්‍රහ කළ යුත්තේ කෙසේද? JSON ආරක්ෂිතව වලංගු කර විග්‍රහ කරන මොඩියුලයක් තිබේද?

Answers:


1110

ඔබට සරලව භාවිතා කළ හැකිය JSON.parse .

JSONවස්තුවෙහි අර්ථ දැක්වීම ECMAScript 5 පිරිවිතරයේ කොටසකි . node.js ගූගල් ක්‍රෝම් හි V8 එන්ජිම මත ගොඩනගා ඇති අතර එය ECMA ප්‍රමිතියට අනුකූල වේ. එබැවින් node.js හි ගෝලීය වස්තුවක් ද ඇත [docs]JSON .

සටහන - JSON.parseවත්මන් නූල් ගැටගැසීමට හැකි වන්නේ එය සමමුහුර්ත ක්‍රමයක් වන බැවිනි. එබැවින් ඔබ විශාල JSON වස්තු විග්‍රහ කිරීමට අදහස් කරන්නේ නම් ප්‍රවාහය json විග්‍රහකයක් භාවිතා කරන්න.


නිල ලියකියවිලි වල එය නැත්තේ මන්දැයි ඕනෑම අයෙක් දන්නවාද? නැතහොත්, එය තිබේ නම්, එය සොයාගත හැක්කේ කොතැනින්ද?
snapfractalpop

34
nsnapfractalpop: ප්‍රලේඛනය විස්තර කරන්නේ node.js හි කොටසක් වන කාර්යයන් යනාදිය පමණි. සම්මත ජාවාස්ක්‍රිප්ට් විශේෂාංග V8 හි කොටසකි , node.js ගොඩනගා ඇත. මම ඒ අනුව පිළිතුර යාවත්කාලීන කළෙමි.
ෆීලික්ස් ක්ලින්ග්

1
El ෆීලික්ස්ක්ලිං එය වටින දේ සඳහා, නෝඩ් හි ගිතුබ් විකියේ මෙහි දේවල් රාශියක් තිබේ
damianb

මෙන්න, මම ඔබට මෙම පිළිතුර අන්තර්ජාලය හරහා දැක බලා සෙල්ලම් කළ හැකි නිරූපණයක් ප්‍රකාශයට පත් කර ඇත (විග්‍රහ කිරීමේ උදාහරණය app.js ගොනුවේ ඇත - ඉන්පසු ධාවන බොත්තම ක්ලික් කර ටර්මිනලයේ ප්‍රති result ලය බලන්න): සබැඳිය ඔබට කේතය වෙනස් කළ හැකිය සහ බලපෑම බලන්න ...
nathan g

ඔබේ පිළිතුරට ජාවාස්ක්‍රිප්ට් සින්ටැක්ස් පිළිබඳ පූර්ව දැනුමක් අවශ්‍ය වේ. භාවිත උදාහරණයක් පෙන්වීම කෙතරම් දුෂ්කර ද? JSON.parse (str); // යනු නොබ්-හිතකාමී සහ එබැවින් වඩා හොඳ පිළිතුරයි
වෙබ්

665

ඔබට .json ගොනු අවශ්‍ය විය හැකිය.

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

උදාහරණයක් config.jsonලෙස ඔබේ මූලාශ්‍ර කේත ගොනුවට සමාන නාමාවලියක ගොනුවක් තිබේ නම්:

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

හෝ (ගොනු දිගුව මඟ හැරිය හැක):

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

බවයි සටහන් requireවන්නේ සමමුහුර්ත සහ එකම ගොනුව කියවන වරක් , පහත සඳහන් ඇමතුම් හැඹිලි සිට ප්රතිඵලයක් ආපසු

තවද මෙය ඔබ භාවිතා කළ යුත්තේ ඔබේ නිරපේක්ෂ පාලනය යටතේ ඇති දේශීය ගොනු සඳහා පමණි, මන්ද එය ගොනුව තුළ ඇති ඕනෑම කේතයක් ක්‍රියාත්මක කළ හැකි බැවිනි.


4
ගොනුව විග්‍රහ කිරීමට ඔබ මෙම ක්‍රමය භාවිතා කරන්නේ නම් අවශ්‍යතාවය සඳහා මාර්ගය සැලකිල්ලට ගැනීමට වග බලා ගන්න. උදාහරණයක් ලෙස, ඔබට මෙවැනි දෙයක් කිරීමට අවශ්‍ය විය හැකිය: './file-name-with-no-extension' අවශ්‍ය වේ (උදාහරණයක් ලෙස ගොනුව වත්මන් නාමාවලියෙහි තිබේ නම්)
SnapShot

94
ප්‍රතිචාරය හැඹිලිගත කර ඇති බව සලකන්න. උදා: ඔබ ඉහත සඳහන් කළහොත් ශ්‍රිතයක් සඳහා ඇමතුමක් අවශ්‍ය නම්, ශ්‍රිතය අමතන්න, JSON ගොනුව වෙනස් කර නැවත ශ්‍රිතය අමතන්න, ඔබට JSON ගොනුවේ පැරණි අනුවාදය ලැබෙනු ඇත . මාව දෙවරක් අල්ලා ගත්තා!
බෙන් ක්ලේටන්

15
requireඑය සමමුහුර්ත බව සලකන්න . ඔබට fs.readFileඒ වෙනුවට මිත්‍රශීලී භාවිතය සමමුහුර්ත කිරීමට අවශ්‍ය නම්JSON.parse
ඉවාන් මොරන්

29
මෙම ප්‍රවේශය ගොනුව ජාවාස්ක්‍රිප්ට් ලෙස සලකන්නේද, එමඟින් .json ගොනුවේ අත්තනෝමතික කේත ධාවනය කළ හැකිද?
d11wtq

15
සරල සටහන: .jsonදිගුව භාවිතා කිරීමට අමතක නොකරන්න ! ඔබේ ගොනුවට .jsonදිගුව නොමැති නම්, අවශ්‍යතාවය එය json ගොනුවක් ලෙස සලකන්නේ නැත.
ජේසන්

325

ඔයාට පාවිච්චි කරන්න පුළුවන් JSON.parse() .

JSONඕනෑම ECMAScript 5 අනුකූල JavaScript ක්‍රියාත්මක කිරීමේදී ඔබට වස්තුව භාවිතා කළ හැකිය . හා V8 Node.js ගොඩනැගිය හැකි, ඔවුන්ගෙන් එක් කෙනෙක් ය.

සටහන: සංවේදී තොරතුරු (උදා: මුරපද) ගබඩා කිරීම සඳහා ඔබ JSON ගොනුවක් භාවිතා කරන්නේ නම්, එය කිරීම වැරදි ක්‍රමයයි. හෙරොකු එය කරන්නේ කෙසේදැයි බලන්න: https://devcenter.heroku.com/articles/config-vars#setting-up-config-vars-for-a-deployed-application . ඔබේ වේදිකාව එය කරන්නේ කෙසේදැයි 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 විග්‍රහකය භාවිතා කළ යුතුය. එසේ නොවුවහොත් එය ඔබගේ ප්‍රොසෙසරය ගැට ගසා JSON අන්තර්ගතය සම්පුර්ණයෙන්ම ප්‍රවාහය වන තෙක් ඔබේ සිදුවීම් ලූපය යටපත් කරනු ඇත.

ඇත NPM පැකේජ ඕනෑ තරම් ලබා ගත හැකි මේ සඳහා. ඔබට වඩාත් සුදුසු දේ තෝරන්න.


දෝෂ හැසිරවීම / ආරක්ෂාව

කිරීමට සමත් වන බව ඕනෑම දෙයක් නම්, ඔබට අවිශ්වාස නම් JSON.parse()වේ වලංගු JSON , වන ලෙස ඉල්ලා ආවරණය කිරීමට වග බලා ගන්න JSON.parse()ඇතුළේ try/catchවාරණ. JSON නූලක් ලබා දී ඇති පරිශීලකයෙකුට ඔබගේ යෙදුම බිඳ වැටිය හැකි අතර ආරක්ෂක වළලු පවා ඇති විය හැකිය. ඔබ බාහිරව සපයන ලද JSON විග්‍රහ කරන්නේ නම් දෝෂ හැසිරවීම සිදු කරන බවට වග බලා ගන්න.


2
and could even lead to security holesකුතුහලයෙන්, කෙසේද?
නටාරියෝ

6
atnatario: අපි මෙහි කතා කරන්නේ සේවාදායක පාර්ශවීය JS ගැන ය. යමෙකු පරිශීලක සපයන JSON විග්‍රහ කරයි යැයි සිතමු. JSON සැමවිටම හොඳින් පිහිටුවා ඇති බවට උපකල්පනය නම්, දෝෂයක් අවුලුවාලීමට ප්‍රහාරකයෙකුට යම් විකෘති JSON යැවිය හැකි අතර, එය සේවාදායකයාගේ පැත්තට විහිදුවන්නේ නම් පද්ධතිය පිළිබඳ වැදගත් තොරතුරු හෙළි කළ හැකිය. නැතහොත් JSON දෙකම විකෘති වී ඇති අතර එහි යම් පෙළක් අඩංගු වී තිබේ <script>...නම් සහ දෝෂය සේවාදායකයාගේ පැත්තට විසිරී තිබේ නම්, ඔබට එහි XSS දෝෂයක් තිබේ. එබැවින් ඔබ විග්‍රහ කරන ස්ථානයේදීම JSON දෝෂ හැසිරවීම IMO වැදගත් වේ.
sampathsris

1
Ick නික්ස්ටයිල්: කෙසේ වෙතත්, මම "මෙය නිර්දේශ නොකරයි" "මම නිර්දේශ නොකරමි" ලෙස වෙනස් කළෙමි. මම හිතනවා ඔබ දැන් සතුටුයි කියලා.
sampathsris

1
Ick නික්ස්ටයිල්: මා ලැයිස්තුගත කර ඇති අඩුපාඩු සැලකිල්ලට ගෙන එය හොඳින් සැලසුම් කළ අංගයක් යැයි මම නොසිතමි . සමහර අය සිතූ පරිදි මට පෙනේ "ඒයි, requireJSON ඇතුළත් කිරීමට භාවිතා කිරීම සිසිල් නොවේද?" සහ අතුරු ආබාධ ලේඛනගත කිරීමට පවා කරදර නොවීය. ජාවාස්ක්‍රිප්ට් සහ JSON (නැත, ඒවා සමාන නොවේ) යන භාෂා දෙකකින් ලිපිගොනු පිළිගැනීම අවශ්‍ය වේ. SRP සඳහා බොහෝ දේ.
sampathsris

1
IckNickSteele: ඔව්, වින්‍යාසය සඳහා පමණක් එය හොඳින් ක්‍රියාත්මක වේ. නමුත් JSON වින්‍යාසය සඳහා පමණක් භාවිතා නොවේ.
sampathsris

85

JSON වස්තුව භාවිතා කරන්න :

JSON.parse(str);

12
මෙය ඉහළම පිළිතුර අනුපිටපත් කරයි. කරුණාකර එය මකා දැමීම ගැන සලකා බලන්න; ඔබ ලකුණු තබා ගනීවි.
ඩෑන් ඩස්කල්ස්කු

6
මෙම පිළිතුරට උඩුකුරු 50 ක් ඇත. අනුව 1% පාලනය , සමහර විට භාවිතා කරන්නන් 5000 කාලය මෙම පිළිතුර කියවීම, ඉහළ එක් දෙයක් එකතු කරන වියදම් කර තිබෙනවා. එය වයස අවුරුදු 3 ක් වීම ගැටලුව තවත් උග්‍ර කරයි :)
ඩෑන් ඩස්කලෙස්කු

16
AnDanDascalescu - ඔබ දුටුවා නම්, පිළිතුරු දෙක හරියටම මීට වසර 3 කට පෙර පළ කරන ලදී. ඔවුන් දෙදෙනාම එකම තොරතුරු සපයයි. SO පුරා ඇති තත්වය මෙයයි, මගේ පිළිතුරු වලින් අඩක් ඉවත් කිරීමට මම සූදානම් නොවන්නේ ඒවා පිළිගත් පිළිතුර නොවන නිසාය.
මාර්ක් කාන්

8
මෙම අදහස් දැක්වීම් මාලාව තරමක් සිත්ගන්නාසුළු බව මට පෙනී ගිය නමුත් පිළිතුර මගේ කාලය නාස්ති කිරීමක් විය. ... පිළිතුර මකා දැමිය යුතු යැයි එයින් ගම්‍ය වන්නේ දැයි මට විශ්වාස නැත, මන්ද එවිට මම අදහස් දැක්වීමේ නූල දැක නොතිබෙනු ඇත. නමුත් වෙනත් ආකාරයකින් මම ඔව් යැයි කියමි.
මැල්කම් ඕෂන්

7
An ඩැන්ඩස්කල්ස්කු, මෙම පිළිතුර වඩාත් පැහැදිලි හා කෙළින්ම කාරණය බව මම විශ්වාස කරමි. පිළිගත් තැනැත්තා භාවිතයට උදාහරණයක් නොදෙන අතර බොහෝ සබැඳි සහ අමතර දේවල් නිසා ව්‍යාකූල වේ.
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
මෙම ප්‍රවේශයට json ගොනුව යෙදුමට දේශීයව අවශ්‍ය නොවන බව මම කැමතියි. ඔබට ස්තුතියි!
චාල්ස් බ්‍රැන්ඩ්ට්

35

ගෝලීය JSON වස්තුවට විකල්ප ඇති බව සඳහන් කිරීමට කැමැත්තෙමි. JSON.parseසහJSON.stringify දෙකම සම මුහුර්තක වේ, ඒ නිසා ඔබ විශාල වස්තූන් සමග ගනුදෙනු කිරීමට අවශ්ය නම් ඔබට අසමමිතික JSON මොඩියුල සමහර පරීක්ෂා කිරීමට ඔබට අවශ්ය විය හැකිය.

බලන්න: https://github.com/joyent/node/wiki/Modules#wiki-parsers-json


1
එන සම්බන්ධතා වලින් යමෙකු JSON දත්ත අපේක්ෂා කරන්නේ නම් මෙය විශේෂයෙන් සත්‍ය වේ. JSON.parseඔබේ මුළු යෙදුමම විකෘති කළ JSON විග්‍රහ කරන්නේ නම් හෝ භාවිතා කරමින් process.on('uncaughtException', function(err) { ... });අවසානයේදී පරිශීලකයාට "විකෘති JSON" දෝෂයක් යැවීමට අවස්ථාවක් නොලැබෙනු ඇත.
පෝල්

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
ඔබේ JSON විග්‍රහ කිරීමට අපොහොසත් වුවහොත් හෝ ගොනුව නොපවතින අවස්ථාවකදී ඔබ ඔබේ var ගොනු රේඛාව උත්සාහ කර / අල්ලා ගත යුතු බව සඳහන් කිරීම වටී.
ෆොස්ටා

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
මට අවශ්‍ය වන්නේ process.nextTick යනු aysnc නොවන බව සටහනක් තැබීමට ය. එය JS සිදුවීම් පුඩුවේ ඊළඟ ක්‍රියාකාරී ඇමතුම ලැබෙන තෙක් ගොනුව කියවීම කල් දමයි. JSON.parse අසමමුහුර්තව ධාවනය කිරීම සඳහා ඔබ ප්‍රධාන Node.js නූල් වලට වඩා වෙනස් නූල් භාවිතා කර ඇත
ඇලෙක්සැන්ඩර් මිල්ස්

9

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
    }))

https://github.com/dominictarr/JSONStream


7

මෙහි සිටින සෑම කෙනෙක්ම JSON.parse ගැන පවසා ඇති නිසා මම වෙනත් දෙයක් පැවසීමට සිතුවෙමි. යෙදුම් සංවර්ධනය කිරීම පහසු සහ වඩා හොඳ කිරීම සඳහා විශාල මොඩියුලයක් බොහෝ මිඩ්ල්වෙයාර් සමඟ සම්බන්ධ වන්න . මිඩ්ල්වෙයාර් වලින් එකක් වන්නේ බොඩිපාර්සර් ය . එය JSON, html-forms සහ වෙනත් දේ විග්‍රහ කරයි . JSON විග්‍රහ කිරීම සඳහා නිශ්චිත මිඩ්ල්වෙයාර් එකක් ඇත.

ඉහත සබැඳි දෙස බලන්න, එය ඔබට සැබවින්ම ප්‍රයෝජනවත් විය හැකිය.



6

මෙහි වෙනත් පිළිතුරු සඳහන් කර ඇති පරිදි, වින්‍යාස ගොනුවක් වැනි ආරක්ෂිත සහ පවතින බව ඔබ දන්නා දේශීය json ගොනුවක් අවශ්‍ය වනු ඇත:

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

හෝ වස්තුවකට නූල් අගයක් විග්‍රහ කිරීමට ගෝලීය JSON වස්තුව භාවිතා කිරීම:

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

ඔබට ගොනුවක් අවශ්‍ය වූ විට එම ගොනුවේ අන්තර්ගතය ඇගයීමට ලක් කරන අතර එය json ගොනුවක් නොව js ගොනුවක් නම් ආරක්ෂක අවදානමක් හඳුන්වා දෙයි.

මෙන්න, මම ක්‍රම දෙකම දැක ඒවා සමඟ සබැඳිව සෙල්ලම් කළ හැකි නිරූපණයක් ප්‍රකාශයට පත් කර ඇත (විග්‍රහ කිරීමේ උදාහරණය app.js ගොනුවේ ඇත - ඉන්පසු ධාවන බොත්තම ක්ලික් කර ටර්මිනලයේ ප්‍රති result ලය බලන්න): http: // staging1 .codefresh.io / labs / api / env / json-parse-example

ඔබට කේතය වෙනස් කර බලපෑම දැක ගත හැකිය ...


5

Node.js සමඟ ඔබේ වින්‍යාසය සඳහා JSON භාවිතා කරනවාද? මෙය කියවා ඔබේ වින්‍යාස කිරීමේ කුසලතා 9000 ට වඩා ලබා ගන්න ...

සටහන: දත්ත = අවශ්‍ය යැයි කියා සිටින පුද්ගලයින් ('./ data.json'); එය ආරක්ෂක අවදානමක් වන අතර ජ්වලිත ජ්වලිතයකින් මිනිසුන්ගේ පිළිතුරු පහත් කොට සලකයි: ඔබ හරියටම හා සම්පූර්ණයෙන්ම වැරදියි . එම ගොනුව තුල නොවන JSON තැබීමෙන් උත්සාහ කරන්න ... node එකක් මතම ඊට අදාල ඔබ දෝෂයක් ලබා දෙනු ඇත, හරියටම ඔබ සමග එකම දෙයක් කළා නම් කරන මෙන් බොහෝ ) මන්දගාමී හා අමාරු කේතය අත්පොත ගොනුව කියවා පසුව JSON.parse (. කරුණාකර වැරදි තොරතුරු පැතිරවීම නවත්වන්න; ඔබ ලෝකයට රිදවනවා මිස උදව් කරන්නේ නැහැ. නෝඩ් නිර්මාණය කර ඇත්තේ මෙයට ඉඩ දීම සඳහා ය; එය ආරක්ෂක අවදානමක් නොවේ!

නිසි යෙදුම් 3+ ස්ථර වින්‍යාස වලින් පැමිණේ :

  1. සේවාදායකය / බහාලුම් වින්‍යාසය
  2. යෙදුම් වින්‍යාසය
  3. (අත්‍යවශ්‍ය නොවේ) කුලී නිවැසියන් / ප්‍රජා / සංවිධාන වින්‍යාසය
  4. පරිශීලක වින්‍යාසය

බොහෝ සංවර්ධකයින් ඔවුන්ගේ සේවාදායකය සහ යෙදුම් වින්‍යාසය වෙනස් කළ හැකි ලෙස සලකයි. එයට බැහැ. ඔබට ඉහළ ස්ථර වලින් එකිනෙකට ඉහළින් ස්ථර වෙනස් කළ හැකිය , නමුත් ඔබ මූලික අවශ්‍යතා වෙනස් කරයි . සමහර දේවල් අවශ්ය පවතී යයි! ඔබගේ වින්‍යාසය වෙනස් කළ නොහැකි ලෙස ක්‍රියා කරන්න, මන්ද සමහර ඒවා මූලික වශයෙන් ඔබේ ප්‍රභව කේතය මෙන් වේ.

ඔබගේ දේවල් ගොඩක් උත්සාහ / උඩ කොටස් සමඟ ඔබේ config පැටවීම littering වැනි ප්රති-රටාවන් ආරම්භක නායකත්වය පසුව වෙනස් කිරීමට යන්නේ නැහැ, ඔබට දිගටම කරගෙන යා හැක බොරුවට බව දකින්න කිරීමට අපොහොසත් වුවහොත්, තොරව නිසි ලෙස යෙදුමකින් ඔබට . ඔබට බැහැ. ඔබට හැකි නම්, එය අයත් වන්නේ ප්‍රජා / පරිශීලක වින්‍යාස ස්ථරයට මිස සේවාදායකයට / යෙදුම් වින්‍යාස ස්ථරයට නොවේ. ඔයා ඒක වැරදියි. යෙදුම එහි බූට්ස්ට්‍රැප් එක අවසන් වූ විට විකල්ප දේවල් ඉහළින් තැබිය යුතුය.

ඔබේ හිස බිත්තියට පහර දීම නවත්වන්න: ඔබේ වින්‍යාසය අතිශය සරල විය යුතුය .

සරල json වින්‍යාස ගොනුවක් සහ සරල app.js ගොනුවක් භාවිතා කරමින් ප්‍රොටොකෝල්-අ nost ෙයවාදී හා දත්ත සම්පත්-අ nost ෙයවාදී සේවා රාමුවක් තරම් සංකීර්ණ දෙයක් සැකසීම කොතරම් පහසුදැයි බලන්න.

container-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 ... (ඔබේ ප්‍රොටෝකෝලය-අ nost ෙයවාදියා සහ දත්ත ප්‍රභව අ nost ෙයවාදියාට බලය සපයන කේතය)

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

මෙම රටාව භාවිතා කරමින්, ඔබට දැන් ඔබගේ ඇරඹූ යෙදුමට ඉහළින් ප්‍රජා සහ පරිශීලක වින්‍යාසගත කළ හැකි දෑ පැටවිය හැකිය, dev ops ඔබේ වැඩ භාජනයකට ගෙන ගොස් එය පරිමාණය කිරීමට සූදානම්ය. ඔබ කියවා ඇත්තේ බහුකාර්ය සඳහා ය. පරිශීලක භූමිය හුදෙකලා වේ. දැන් ඔබ භාවිතා කරන්නේ කුමන සේවා ප්‍රොටෝකෝලය, ඔබ භාවිතා කරන්නේ කුමන දත්ත සමුදා වර්ගයද යන්න සහ හොඳ කේත ලිවීම කෙරෙහි අවධානය යොමු කරන්න.

ඔබ ස්ථර භාවිතා කරන්නේ, ඔබ සත්යය තනි ප්රභවය මත සියලු දේ සඳහා, ඕනෑම අවස්ථාවක (වෙනත් ස්ථර config වස්තුව) දී විශ්වාසය තැබිය හැකි නිසා, සහ වැලැක්විමට දෝෂයක් චෙක්පත් සෑම පියවරක දී ම, "අයියෝ ජරාව, මම කරන්න යන්නේ කෙසේද ගැන වද වෙන මේ නිසි වින්‍යාසය නොමැතිව වැඩ කරන්න?!? ".


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);
});

ස්තූතියි @eloyesp, මම මෙම කේතය භාවිතා කිරීමට උත්සාහ කළ නමුත් මම දිගටම TypeError: path must be a string or Bufferදෝෂ ලබා ගනිමි - මෙම ගැටළුව නිදොස් කිරීම ආරම්භ කළ යුත්තේ කොතැනින්ද?
ජීපීපී

4

පිළිතුර සම්පුර්ණ කිරීමට අවශ්‍යය (මම ටික වේලාවක් ඒ සමඟ පොරබදමින් සිටියදී), json තොරතුරු වෙත ප්‍රවේශ වන ආකාරය පෙන්වීමට අවශ්‍ය නම්, මෙම උදාහරණයෙන් දැක්වෙන්නේ Json Array වෙත ප්‍රවේශ වීම:

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);

නැතහොත් ඔබ අසංක / භාවිතා කරන්නේ නම්:

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

භාවිතා කිරීමෙන් readFileSyncලැබෙන වාසිය නම්, ගොනුව තැටියෙන් කියවන අතරතුර ඔබේ නෝඩ් සේවාදායකයාට වෙනත් ඉල්ලීම් ක්‍රියාවට නැංවිය හැකිය.


2

JSON.parse ඔබ විග්‍රහ කරන json නූල් වල ආරක්ෂාව සහතික නොකරයි. ඔබ json-safe-parse හෝ ඒ හා සමාන පුස්තකාලයක් වැනි පුස්තකාලයක් දෙස බැලිය යුතුය .

Json-safe-parse npm පිටුවෙන්:

JSON.parse විශිෂ්ටයි, නමුත් එය ජාවාස්ක්‍රිප්ට් සන්දර්භය තුළ එක් බරපතල අඩුපාඩුවක් ඇත: එය ඔබට උරුම වූ දේපල අභිබවා යාමට ඉඩ දෙයි. ඔබ විශ්වාස කළ නොහැකි ප්‍රභවයකින් (උදා: පරිශීලකයෙකු) JSON විග්‍රහ කරන්නේ නම් මෙය ප්‍රශ්නයක් බවට පත්විය හැකි අතර, ඒ සඳහා ඔබ ඇමතීමේ කාර්යයන් පවතිනු ඇතැයි අපේක්ෂා කෙරේ.


2

දෝෂ සහිත වස්තුවක් ආපසු ලබා දීමට ලොඩාෂ්ගේ උත්සාහයේ ක්‍රියාකාරිත්වය, ඔබට isError ශ්‍රිතය සමඟ කටයුතු කළ හැකිය.

// 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) භාවිතා කිරීම වෙනුවට ඔබ එකතු කළේ ඇයිද යන්න ඔබට පැහැදිලි කළ හැකිද
steviejay

2

ඔබේ Json හි යම් දූෂිත දත්ත තිබේ නම් සෑම විටම අනපේක්ෂිත දෝෂයක් ඇති බැවින් JSON.parse උත්සාහක ඇල්ලීමේ අවහිරය භාවිතා කිරීමට වග බලා ගන්න. එබැවින් සරල JSON වෙනුවට මෙම කේතය භාවිතා කරන්න.

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

1

ඔබේ JSON හි අදහස් කිහිපයක් එකතු කිරීමට සහ කොමා පසුපස ලුහුබැඳීමට ඔබට අවශ්‍ය නම් පහත ක්‍රියාත්මක කිරීම අවශ්‍ය වේ:

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"ඔබේ JSON හි වැනි දෙයක් තිබේ නම් එය හොඳින් ක්‍රියාත්මක නොවන බව සලකන්න . ඉතින් වයි.එම්.වී.


1

JSON ප්‍රභව ගොනුව තරමක් විශාල නම්, දේශීය අසමමුහුර්ත හරහා අසමමුහුර්ත මාර්ගය සලකා බැලීමට / Node.js 8.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-extra භාවිතා කරමි . මම එයට බොහෝ කැමතියි - එය ඇමතුම් ලබා ගැනීමට සහාය දෙන නමුත්- එය පොරොන්දු සඳහාද සහාය වේ. එබැවින් එය මගේ කේතය වඩාත් කියවිය හැකි ආකාරයකින් ලිවීමට මට හැකියාව ලබා දෙයි:

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මොඩියුලයේ ක්‍රමෝපායන් පාලම් කර ඒවා සහතික කරයි.

සටහන: ඔබට තවමත් ස්වදේශීය Node.js ක්‍රම භාවිතා කළ හැකිය. ඒවා පොරොන්දු වී fs-extra වෙත පිටපත් කරනු ලැබේ. fs.read()සහ සටහන් බලන්නfs.write()

එබැවින් එය මූලික වශයෙන් සියලු වාසි වේ. අනෙක් අයට මෙය ප්‍රයෝජනවත් වේ යැයි මම බලාපොරොත්තු වෙමි.


1

ඔබට ආරක්ෂිත ආකාරයකින් JSON Node.js සමඟ විග්‍රහ කිරීමට අවශ්‍ය නම් (aka: පරිශීලකයාට දත්ත ආදානය කළ හැකිය, නැතහොත් පොදු API) ආරක්ෂිත-ජේසන්-විග්‍රහය භාවිතා කිරීමට මම යෝජනා කරමි .

භාවිතය පෙරනිමිය හා සමාන 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 () භාවිතා කළ හැකිය (එය ගොඩනංවන ලද ශ්‍රිතයක් වන අතර එය උත්සාහක දිනුම් ප්‍රකාශ සමඟ එතීමට ඔබට බල කරනු ඇත).

නැතහොත් jSON විග්‍රහ කරන npm පුස්තකාලයක් භාවිතා කරන්න, json-parse-or වැනි දෙයක්



0

NodeJs යනු ජාවාස්ක්‍රිප්ට් මත පදනම් වූ සේවාදායකයකි, එබැවින් ඔබට එය පිරිසිදු ජාවාස්ක්‍රිප්ට් මඟින් කළ හැකිය ...

හිතන්න ඔයාට මේ Json එක NodeJs වල තියෙනවා කියලා ...

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

ඔබේ json හි විග්‍රහ කළ අනුවාදයක් ලබා ගැනීමට ඔබට ඉහත කළ හැකිය ...


0

ඉහත පිළිතුරු වල සඳහන් පරිදි අපට භාවිතා කළ හැකිය JSON.parse() JSON වෙත නූල් විග්‍රහ කිරීමට නමුත් විග්‍රහ කිරීමට පෙර, නිවැරදි දත්ත විග්‍රහ කිරීමට වග බලා ගන්න, නැතිනම් එය ඔබගේ මුළු යෙදුමම පහතට ගෙන එනු ඇත

එය මේ ආකාරයෙන් භාවිතා කිරීම ආරක්ෂිතයි

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
දැන්, දැන් අපි ද්විත්ව ප්‍රමිතියක්
නොතබමු
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.