NSON.js का उपयोग करके JSON फ़ाइल में डेटा लिखें / जोड़ें


198

मैं पाश डेटा से नोड का उपयोग करके JSON फ़ाइल लिखने की कोशिश कर रहा हूं, जैसे:

let jsonFile = require('jsonfile');

for (i = 0; i < 11; i++) {
    jsonFile.writeFile('loop.json', "id :" + i + " square :" + i * i);
}

लूप में आउट .json है:

id :1 square : 1

लेकिन मैं इस तरह से (नीचे) आउटपुट फाइल चाहता हूं और यह भी कि अगर मैं उस कोड को फिर से चलाता हूं तो उसे उस नए आउटपुट को तत्वों के समान मौजूदा डेटा में जोड़ना चाहिए:

{
   "table":[
      {
         "Id ":1,
         "square ":1
      },
      {
         "Id ":2,
         "square ":3
      },
      {
         "Id ":3,
         "square ":9
      },
      {
         "Id ":4,
         "square ":16
      },
      {
         "Id ":5,
         "square ":25
      },
      {
         "Id ":6,
         "square ":36
      },
      {
         "Id ":7,
         "square ":49
      },
      {
         "Id ":8,
         "square ":64
      },
      {
         "Id ":9,
         "square ":81
      },
      {
         "Id ":10,
         "square ":100
      }
   ]
}

मैं उसी फ़ाइल का उपयोग करना चाहता हूं जिसे मैंने पहली बार बनाया था लेकिन जब भी मैं उस कोड को चलाता हूं तो नए तत्वों को उसी फ़ाइल में जोड़ना चाहिए

const fs = require('fs');

let obj = {
    table: []
};

fs.exists('myjsonfile.json', function(exists) {

    if (exists) {

        console.log("yes file exists");

        fs.readFile('myjsonfile.json', function readFileCallback(err, data) {

            if (err) {
                console.log(err);
            } else {
                obj = JSON.parse(data);

                for (i = 0; i < 5; i++) {
                    obj.table.push({
                        id: i,
                        square: i * i
                    });
                }

                let json = JSON.stringify(obj);
                fs.writeFile('myjsonfile.json', json);
            }
        });
    } else {

        console.log("file not exists");

        for (i = 0; i < 5; i++) {
            obj.table.push({
                id: i,
                square: i * i
            });
        }

        let json = JSON.stringify(obj);
        fs.writeFile('myjsonfile.json', json);
    }
});

जवाबों:


387

यदि यह json फ़ाइल उस समय से बहुत बड़ी नहीं हो जाती है, जब आपको प्रयास करना चाहिए:

  1. इसमें तालिका सरणी के साथ एक जावास्क्रिप्ट ऑब्जेक्ट बनाएं

    var obj = {
       table: []
    };
  2. इसमें कुछ डेटा जोड़ें जैसे

    obj.table.push({id: 1, square:2});
  3. इसे ऑब्जेक्ट से स्ट्रिंग में स्ट्रिंग के साथ परिवर्तित करें

    var json = JSON.stringify(obj);
  4. फ़ाइल को डिस्क पर लिखने के लिए fs का उपयोग करें

    var fs = require('fs');
    fs.writeFile('myjsonfile.json', json, 'utf8', callback);
  5. यदि आप इसे जोड़ना चाहते हैं तो इसे json फाइल पढ़ें और इसे किसी ऑब्जेक्ट में वापस कन्वर्ट करें

    fs.readFile('myjsonfile.json', 'utf8', function readFileCallback(err, data){
        if (err){
            console.log(err);
        } else {
        obj = JSON.parse(data); //now it an object
        obj.table.push({id: 2, square:3}); //add some data
        json = JSON.stringify(obj); //convert it back to json
        fs.writeFile('myjsonfile.json', json, 'utf8', callback); // write it back 
    }});

यह प्रभावी रूप से 100 एमबी अधिकतम डेटा के लिए काम करेगा। इस सीमा से अधिक, आपको एक डेटाबेस इंजन का उपयोग करना चाहिए।

अपडेट करें:

एक फ़ंक्शन बनाएं जो स्ट्रिंग के रूप में वर्तमान दिनांक (वर्ष + माह + दिन) लौटाता है। इस स्ट्रिंग + .json नाम की फ़ाइल बनाएँ। fs मॉड्यूल में एक फ़ंक्शन होता है जो फ़ाइल अस्तित्व के लिए जाँच कर सकता है जिसका नाम fs.stat (पथ, कॉलबैक) है। इसके साथ, आप जाँच सकते हैं कि फ़ाइल मौजूद है या नहीं। यदि यह मौजूद है, तो रीड फ़ंक्शन का उपयोग करें यदि यह नहीं है, तो बनाएं फ़ंक्शन का उपयोग करें। तिथि स्ट्रिंग का उपयोग करें क्योंकि फ़ाइल को आज की तारीख + .json के रूप में नामित किया जाएगा। कॉलबैक में एक आँकड़े ऑब्जेक्ट होगा जो फ़ाइल मौजूद नहीं होने पर अशक्त होगा।


1
उत्तर के लिए धन्यवाद, मैंने इसके काम करने की कोशिश की लेकिन यह जांचने के लिए कि पुरानी फ़ाइल मौजूद है या नहीं, फिर से पढ़ने के लिए कोड कोड चलाएं, फिर सीधे लिखें मैं फ़ाइल नाम में वर्तमान तिथि के साथ दैनिक नई फ़ाइल बना रहा हूं और मैं चाहता हूं कि उस पूरे दिन में नया डेटा जोड़ा जाए जब यह कोड चलता है
Isoftmaster

1
धन्यवाद एक बार फिर से मैंने अपना कोड काम किया: डी आपके सभी समर्थन के साथ लेकिन मैंने इस्तेमाल किया fexexists मेरे सवाल का जवाब के साथ अद्यतन किया
Isoftmaster

या आप jsonfile Node पैकेज का भी उपयोग कर सकते हैं जो उपरोक्त कोड में नहीं दिखाए गए सभी जटिलताओं को लपेटता है।
19

अगर "तालिका" या JSON ऑब्जेक्ट के गुणों के बारे में पहले से पता नहीं है तो क्या होगा ???
ओल्डबॉय

@kailniris सर मैं अपने स्थानीय json फ़ाइल में कोणीय js.ie में एक विशिष्ट नोड को कैसे अपडेट कर सकता हूं मेरे पास एक config.json फ़ाइल है जो मैं इसके एक विशिष्ट नोड को अद्यतन करना चाहता था फिर मैं ऐसा कैसे कर सकता हूं।
शाम

23

कृपया निम्न प्रोग्राम आज़माएँ। आप इस आउटपुट की उम्मीद कर रहे होंगे।

var fs = require('fs');

var data = {}
data.table = []
for (i=0; i <26 ; i++){
   var obj = {
       id: i,
       square: i * i
   }
   data.table.push(obj)
}
fs.writeFile ("input.json", JSON.stringify(data), function(err) {
    if (err) throw err;
    console.log('complete');
    }
);

एक जावास्क्रिप्ट फ़ाइल में इस प्रोग्राम को सहेजें, कहते हैं, square.js।

फिर कमांड प्रॉम्प्ट से कमांड का उपयोग करके प्रोग्राम चलाएं node square.js

यह क्या करता है, बस मौजूदा फ़ाइल को डेटा के नए सेट के साथ अधिलेखित करना, हर बार जब आप कमांड निष्पादित करते हैं।

हैप्पी कोडिंग।


12

आपको फ़ाइल को हर बार पढ़ना चाहिए, जब भी आप एक नई प्रॉपर्टी को json में जोड़ना चाहते हैं, और फिर नई प्रॉपर्टीज़ को जोड़ें

var fs = require('fs');
fs.readFile('data.json',function(err,content){
  if(err) throw err;
  var parseJson = JSON.parse(content);
  for (i=0; i <11 ; i++){
   parseJson.table.push({id:i, square:i*i})
  }
  fs.writeFile('data.json',JSON.stringify(parseJson),function(err){
    if(err) throw err;
  })
})

1
उत्तर के लिए धन्यवाद, मैंने इसके काम करने की कोशिश की, लेकिन यह जांचने के लिए कि पुरानी फ़ाइल मौजूद है या नहीं, तो फिर से पढ़ने के लिए एक नया फ़ाइल बनाने के लिए रीडाइलाइल कोड चलाएं। मैं फ़ाइल नाम में वर्तमान तिथि के साथ दैनिक नई फ़ाइल बना रहा हूं और मैं चाहता हूं कि इसमें नया डेटा जोड़ा जाए पुरानी फ़ाइल पूरे दिन जब यह कोड चलता है
Isoftmaster

10

उपरोक्त उदाहरण भी सही है, लेकिन मैं सरल उदाहरण प्रदान करता हूं:

var fs = require("fs");
var sampleObject = {
    name: 'pankaj',
    member: 'stack',
    type: {
        x: 11,
        y: 22
    }
};

fs.writeFile("./object.json", JSON.stringify(sampleObject, null, 4), (err) => {
    if (err) {
        console.error(err);
        return;
    };
    console.log("File has been created");
});

8

प्रयत्न

var fs = require("fs");
var sampleObject = { your data };

fs.writeFile("./object.json", JSON.stringify(sampleObject, null, 4), (err) => {
    if (err) {  console.error(err);  return; };
    console.log("File has been created");
});

7

फॉर्मिंग के लिए jsonfile spacesविकल्प देता है जिसे आप पैरामीटर के रूप में पास कर सकते हैं:

   jsonfile.writeFile(file, obj, {spaces: 2}, function (err) {
         console.error(err);
   })

या उपयोग करें jsonfile.spaces = 4। विवरण यहाँ पढ़ें ।

मैं लूप में हर बार फाइल करने के लिए लिखने का सुझाव नहीं देता, बल्कि लूप में JSON ऑब्जेक्ट का निर्माण करता हूं और लूप के बाहर फाइल करने के लिए लिखता हूं।

var jsonfile = require('jsonfile');
var obj={
     'table':[]
    };

for (i=0; i <11 ; i++){
       obj.table.push({"id":i,"square":i*i});
}
jsonfile.writeFile('loop.json', obj, {spaces:2}, function(err){
      console.log(err);
});

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.