JSON को CSV प्रारूप में कैसे परिवर्तित करें और एक चर में स्टोर करें


97

मेरे पास एक लिंक है जो ब्राउज़र में JSON डेटा को खोलता है, लेकिन दुर्भाग्य से मुझे कोई सुराग नहीं है कि इसे कैसे पढ़ा जाए। क्या CSV प्रारूप में JavaScript का उपयोग करके इस डेटा को रूपांतरित करने और इसे JavaScript फ़ाइल में सहेजने का कोई तरीका है?

डेटा ऐसा दिखता है:

{
  "count": 2,
  "items": [{
    "title": "Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust)",
    "description": "Advertise here with BSA Apple cancelled its scheduled sale of iPhone 4S in one of its stores in China\u2019s capital Beijing on January 13. Crowds outside the store in the Sanlitun district were waiting on queues overnight. There were incidents of scuffle between shoppers and the store\u2019s security staff when shoppers, hundreds of them, were told that the sales [...]Source : Design You TrustExplore : iPhone, iPhone 4, Phone",
    "link": "http:\/\/wik.io\/info\/US\/309201303",
    "timestamp": 1326439500,
    "image": null,
    "embed": null,
    "language": null,
    "user": null,
    "user_image": null,
    "user_link": null,
    "user_id": null,
    "geo": null,
    "source": "wikio",
    "favicon": "http:\/\/wikio.com\/favicon.ico",
    "type": "blogs",
    "domain": "wik.io",
    "id": "2388575404943858468"
  }, {
    "title": "Apple to halt sales of iPhone 4S in China (Fame Dubai Blog)",
    "description": "SHANGHAI \u2013 Apple Inc said on Friday it will stop selling its latest iPhone in its retail stores in Beijing and Shanghai to ensure the safety of its customers and employees. Go to SourceSource : Fame Dubai BlogExplore : iPhone, iPhone 4, Phone",
    "link": "http:\/\/wik.io\/info\/US\/309198933",
    "timestamp": 1326439320,
    "image": null,
    "embed": null,
    "language": null,
    "user": null,
    "user_image": null,
    "user_link": null,
    "user_id": null,
    "geo": null,
    "source": "wikio",
    "favicon": "http:\/\/wikio.com\/favicon.ico",
    "type": "blogs",
    "domain": "wik.io",
    "id": "16209851193593872066"
  }]
}

निकटतम मैं पा सकता था: एमएस एक्सेल के लिए जेएसएन प्रारूप को सीएसवी प्रारूप में बदलें

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

यह भी जानना चाहते हैं कि भागने के पात्रों को कैसे बदलना है: '\u2019'वापस सामान्य करने के लिए।


मैंने इस कोड की कोशिश की:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title>JSON to CSV</title>
  <script src="http://code.jquery.com/jquery-1.7.1.js" type="text/javascript"></script>
  <script type="text/javascript">
    var json3 = {
      "count": 2,
      "items": [{
          "title": "Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust)",
          "description": "Advertise here with BSA Apple cancelled its scheduled sale of iPhone 4S in one of its stores in China’s capital Beijing on January 13. Crowds outside the store in the Sanlitun district were waiting on queues overnight. There were incidents of scuffle between shoppers and the store’s security staff when shoppers, hundreds of them, were told that the sales [...]Source : Design You TrustExplore : iPhone, iPhone 4, Phone",
          "link": "http://wik.io/info/US/309201303",
          "timestamp": 1326439500,
          "image": null,
          "embed": null,
          "language": null,
          "user": null,
          "user_image": null,
          "user_link": null,
          "user_id": null,
          "geo": null,
          "source": "wikio",
          "favicon": "http://wikio.com/favicon.ico",
          "type": "blogs",
          "domain": "wik.io",
          "id": "2388575404943858468"
        },
        {
          "title": "Apple to halt sales of iPhone 4S in China (Fame Dubai Blog)",
          "description": "SHANGHAI – Apple Inc said on Friday it will stop selling its latest iPhone in its retail stores in Beijing and Shanghai to ensure the safety of its customers and employees. Go to SourceSource : Fame Dubai BlogExplore : iPhone, iPhone 4, Phone",
          "link": "http://wik.io/info/US/309198933",
          "timestamp": 1326439320,
          "image": null,
          "embed": null,
          "language": null,
          "user": null,
          "user_image": null,
          "user_link": null,
          "user_id": null,
          "geo": null,
          "source": "wikio",
          "favicon": "http://wikio.com/favicon.ico",
          "type": "blogs",
          "domain": "wik.io",
          "id": "16209851193593872066"
        }
      ]
    }
    //var objJson = JSON.parse(json3.items);

    DownloadJSON2CSV(json3.items);

    function DownloadJSON2CSV(objArray) {
      var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;

      var str = '';

      for (var i = 0; i < array.length; i++) {
        var line = '';

        for (var index in array[i]) {
          line += array[i][index] + ',';
        }

        line.slice(0, line.Length - 1);

        str += line + '\r\n';
      }
      $('div').html(str);
    }
  </script>

</head>

<body>
  <div></div>
</body>

</html>

लेकिन यह काम नहीं लगता है। क्या कोई मदद कर सकता है?


Zachhunter.com/2011/06/json-to-csv के बारे में क्या ?
ldiqual

आपका वहां एक अच्छा कोड है। वह लाइन जो डाउनलोड की गई है window.open ("data: text / csv; charset = utf-8," + भागने (str)) .. बस इसे छोड़ दें यदि आपको इसकी आवश्यकता नहीं है। और सीएसवी स्ट्रिंग को इस चर में रखा गया है: str
zdrsh

CSV JSON के रूप में डेटा (साथ ही) के कई स्तरों को संभाल नहीं सकता है। आप अपने JSON को CSV की तरह दिखने की उम्मीद कैसे करेंगे? 2,Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust), ...?
स्टीफन

मैं अपने डेटा को पसंद करना चाहूंगा: Apple iPhone 4S की बिक्री बीजिंग में जारी की गई अराजकता (डिजाइन आप पर भरोसा), बीएसए के साथ यहां विज्ञापन करें Apple ने अपने एक स्टोर में iPhone 4S की अपनी निर्धारित बिक्री को रद्द कर दिया है .. ,,,,, आदि मैं इस शुरुआती पात्रों को आसानी से हटा सकता हूं: "{" गिनती ": 2," आइटम ": [:"
प्रणयबेहल

@zdrsh हां लेकिन किसी कारण से मैं इसे काम करने में सक्षम नहीं हूं।
praneybehl

जवाबों:


151

JSON को csv में बदलने का एक अधिक सुंदर तरीका बिना किसी ढांचे के मानचित्र फ़ंक्शन का उपयोग करना है:

var json = json3.items
var fields = Object.keys(json[0])
var replacer = function(key, value) { return value === null ? '' : value } 
var csv = json.map(function(row){
  return fields.map(function(fieldName){
    return JSON.stringify(row[fieldName], replacer)
  }).join(',')
})
csv.unshift(fields.join(',')) // add header column
 csv = csv.join('\r\n');
console.log(csv)

आउटपुट:

title,description,link,timestamp,image,embed,language,user,user_image,user_link,user_id,geo,source,favicon,type,domain,id
"Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust)","Advertise here with BSA Apple cancelled its scheduled sale of iPhone 4S in one of its stores in China’s capital Beijing on January 13. Crowds outside the store in the Sanlitun district were waiting on queues overnight. There were incidents of scuffle between shoppers and the store’s security staff when shoppers, hundreds of them, were told that the sales [...]Source : Design You TrustExplore : iPhone, iPhone 4, Phone","http://wik.io/info/US/309201303","1326439500","","","","","","","","","wikio","http://wikio.com/favicon.ico","blogs","wik.io","2388575404943858468"
"Apple to halt sales of iPhone 4S in China (Fame Dubai Blog)","SHANGHAI – Apple Inc said on Friday it will stop selling its latest iPhone in its retail stores in Beijing and Shanghai to ensure the safety of its customers and employees. Go to SourceSource : Fame Dubai BlogExplore : iPhone, iPhone 4, Phone","http://wik.io/info/US/309198933","1326439320","","","","","","","","","wikio","http://wikio.com/favicon.ico","blogs","wik.io","16209851193593872066"

अपडेट ES6 (2016)

इस कम घने वाक्यविन्यास का उपयोग करें और संख्याओं को जोड़ते हुए स्ट्रिंग को जोड़ने के लिए JSON.stringify भी करें:

const items = json3.items
const replacer = (key, value) => value === null ? '' : value // specify how you want to handle null values here
const header = Object.keys(items[0])
let csv = items.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join(','))
csv.unshift(header.join(','))
csv = csv.join('\r\n')

console.log(csv)

3
मुझे यह पसंद है, लेकिन यह ध्यान दिया जाना चाहिए कि यह कुछ चीजों को नहीं संभालता है जो कुछ आदर्श लग सकता है। उदाहरण के लिए अपनी ही लाइन पर प्रत्येक रिकॉर्ड, संख्या और
बूलियनों को अधूरा

2
आप प्रति पंक्ति एक रिकॉर्ड प्राप्त करने के लिए फ़ील्ड.मैप () के बाद एक + "\ r \ n" जोड़ सकते हैं। नंबरों को प्राप्त करने के लिए आप JSON.stringify (पंक्ति [फ़ील्डनाम]) का उपयोग कर सकते हैं, जिसके बजाय केवल स्ट्रिंग्स को उद्धृत किया जाएगा और नंबरों को छोड़ दिया जाएगा।
ईसाई Landgren

1
@scunliffe: मैंने JSON.stringify के साथ एक नया उदाहरण अपडेट किया - यह आपके द्वारा वर्णित मामलों को संभालना चाहिए।
ईसाई Landgren

1
@marathon, अच्छा कैच, ने अलग से अशक्त मामलों को संभालने के लिए एक प्रतिकृति के साथ उदाहरण को अद्यतन किया। यदि कोई प्रतिकृति का उपयोग नहीं किया जाता है, तो नल को आउटपुट किया जाएगा null- अब उदाहरणों को अशक्त, अनिर्धारित और संख्या दोनों को सही ढंग से संभालना चाहिए।
ईसाई लैंडग्रेन

3
वर्थ यह देखते हुए कि यह उद्धरणों में तार से बच जाता है, \"जिसके उपयोग से कुछ फ़ील्ड एक्सेल में देखे जाने पर अपने कॉलम के "पॉप आउट" की अनुमति देता है (जो ""उद्धरण के लिए एक भागने चरित्र के रूप में पसंद करते हैं )। जैसा कि मैंने ऊपर दिए गए मेरे उत्तर में दिया है, .replace(/\\"/g, '""')इसे अंत तक जोड़कर हल किया जा सकता है JSON.stringify(row[fieldName], replacer)
user1274820

51

ठीक है मैं अंत में इस कोड काम कर रहा है:

<html>
<head>
    <title>Demo - Covnert JSON to CSV</title>
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript" src="https://github.com/douglascrockford/JSON-js/raw/master/json2.js"></script>

    <script type="text/javascript">
        // JSON to CSV Converter
        function ConvertToCSV(objArray) {
            var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
            var str = '';

            for (var i = 0; i < array.length; i++) {
                var line = '';
                for (var index in array[i]) {
                    if (line != '') line += ','

                    line += array[i][index];
                }

                str += line + '\r\n';
            }

            return str;
        }

        // Example
        $(document).ready(function () {

            // Create Object
            var items = [
                  { name: "Item 1", color: "Green", size: "X-Large" },
                  { name: "Item 2", color: "Green", size: "X-Large" },
                  { name: "Item 3", color: "Green", size: "X-Large" }];

            // Convert Object to JSON
            var jsonObject = JSON.stringify(items);

            // Display JSON
            $('#json').text(jsonObject);

            // Convert JSON to CSV & Display CSV
            $('#csv').text(ConvertToCSV(jsonObject));
        });
    </script>
</head>
<body>
    <h1>
        JSON</h1>
    <pre id="json"></pre>
    <h1>
        CSV</h1>
    <pre id="csv"></pre>
</body>
</html>

सभी योगदानकर्ताओं को सभी समर्थन के लिए बहुत बहुत धन्यवाद।

Praney


1
मैंने यह कोशिश की। मेरे पास तीन कॉलम हैं लेकिन एक्सेल में सभी चीजें एक ही कॉलम में आ
जाएंगी

1
नितेश आपको निर्दिष्ट करना चाहिए ',' एक
परिसीमनकर्ता के

इसे यहाँ साझा करने के लिए धन्यवाद। बस इसका इस्तेमाल किया और यह सही काम करता है।
रामिन अरबबागरी

इसके लिए धन्यवाद! यदि सेल में ऑब्जेक्ट होता है तो मैंने लाइन में "[ऑब्जेक्ट ऑब्जेक्ट]" होने से बचने के लिए निम्नलिखित को जोड़ा। if (_.isObject (array [i] [index])) {array [i] [index] = JSON.stringify (सरणी [i] [index]); }। (अंडरस्कोर का उपयोग करता है, लेकिन आप वेनिला में बदल सकते हैं)
क्लेक्ट्रॉनिकॉन

1
@ सुनील ने पाया कि यदि मानों में अल्पविराम हैं, तो यह टूट जाता है। मेरी जरूरतों के लिए मैंने बस यही किया: var re = new RegExp (',', 'g'); सरणी [i] [सूचकांक] = सरणी [i] [सूचकांक] .toString ()। प्रतिस्थापित करें (पुनः, ’;’)
क्लेडट्रॉनिकॉन

17

Praneybehl द्वारा बहुत अच्छा समाधान है, लेकिन अगर कोई csvफ़ाइल के रूप में डेटा को सहेजना चाहता है और एक blobविधि का उपयोग कर रहा है तो वे इसे संदर्भित कर सकते हैं:

function JSONToCSVConvertor(JSONData, ReportTitle, ShowLabel) {     

//If JSONData is not an object then JSON.parse will parse the JSON string in an Object
var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;
var CSV = '';    
//This condition will generate the Label/Header
if (ShowLabel) {
    var row = "";

    //This loop will extract the label from 1st index of on array
    for (var index in arrData[0]) {
        //Now convert each value to string and comma-seprated
        row += index + ',';
    }
    row = row.slice(0, -1);
    //append Label row with line break
    CSV += row + '\r\n';
}

//1st loop is to extract each row
for (var i = 0; i < arrData.length; i++) {
    var row = "";
    //2nd loop will extract each column and convert it in string comma-seprated
    for (var index in arrData[i]) {
        row += '"' + arrData[i][index] + '",';
    }
    row.slice(0, row.length - 1);
    //add a line break after each row
    CSV += row + '\r\n';
}

if (CSV == '') {        
    alert("Invalid data");
    return;
}   

//this trick will generate a temp "a" tag
var link = document.createElement("a");    
link.id="lnkDwnldLnk";

//this part will append the anchor tag and remove it after automatic click
document.body.appendChild(link);

var csv = CSV;  
blob = new Blob([csv], { type: 'text/csv' }); 
var csvUrl = window.webkitURL.createObjectURL(blob);
var filename = 'UserExport.csv';
$("#lnkDwnldLnk")
.attr({
    'download': filename,
    'href': csvUrl
}); 

$('#lnkDwnldLnk')[0].click();    
document.body.removeChild(link);
}

यह समाधान काम करता है लेकिन कुछ अजीब स्पॉट हैं - आप var rowदो बार परिभाषित करते हैं (यदि कथन और लूप के लिए क्लोजर नहीं बनाते हैं)। इसके अलावा लेबल / हेडर लूप को शायद एक लाइन तक कम किया जा सकता है:Object.keys(arrData[0]).join(',')
ccnokes

आपका जवाब काम कर रहा है। लेकिन ऐसे मामलों के लिए जैसे यदि कुछ पंक्ति के लिए कुछ स्तंभ उपलब्ध नहीं है, तो यह अनुपलब्ध स्तंभ पर विचार नहीं करेगा और उस पंक्ति डेटा के लिए स्तंभ डेटा को पुन: असाइन नहीं करेगा।
एसएमएस

मैं काम करने के लिए इस विधि को प्राप्त करने में सक्षम था, लेकिन मुझे कुछ कोड को संपादित करना था: 1. JQuery के बिना काम करना: document.getElementById("lnkDwnldLnk").download = filename; document.getElementById("lnkDwnldLnk").href = csvUrl;2. IE11 में काम करना: if (window.navigator && window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveOrOpenBlob(blob, filename); } else { document.getElementById('lnkDwnldLnk').click(); }
जेसन

17

मैं भविष्य में लोगों के लिए यहाँ कुछ कोड जोड़ना चाहता था क्योंकि मैं JSON को CSV दस्तावेज़ में निर्यात करने और इसे डाउनलोड करने का प्रयास कर रहा था।

मैं उपयोग करता हूं $.getJSON एक बाहरी पृष्ठ से json डेटा खींचने के लिए करता , लेकिन यदि आपके पास एक मूल सरणी है, तो आप बस इसका उपयोग कर सकते हैं।

यह सीएसवी डेटा बनाने के लिए ईसाई लैंडग्रेन के कोड का उपयोग करता है।

$(document).ready(function() {
    var JSONData = $.getJSON("GetJsonData.php", function(data) {
        var items = data;
        const replacer = (key, value) => value === null ? '' : value; // specify how you want to handle null values here
        const header = Object.keys(items[0]);
        let csv = items.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join(','));
        csv.unshift(header.join(','));
        csv = csv.join('\r\n');

        //Download the file as CSV
        var downloadLink = document.createElement("a");
        var blob = new Blob(["\ufeff", csv]);
        var url = URL.createObjectURL(blob);
        downloadLink.href = url;
        downloadLink.download = "DataDump.csv";  //Name the file here
        document.body.appendChild(downloadLink);
        downloadLink.click();
        document.body.removeChild(downloadLink);
    });
});

संपादित करें: यह ध्यान देने योग्य है JSON.stringify उद्धरणों में उद्धरण जोड़कर बच जाएंगे\" । यदि आप CSV को एक्सेल में देखते हैं, तो यह पलायन चरित्र के रूप में पसंद नहीं करता है।

आप इसे एक्सेल में ठीक से प्रदर्शित करने .replace(/\\"/g, '""')के JSON.stringify(row[fieldName], replacer)लिए जोड़ सकते हैं (यह प्रतिस्थापित करेगा\" साथ"" जो क्या एक्सेल पसंद है)।

पूरी लाइन: let csv = items.map(row => header.map(fieldName => (JSON.stringify(row[fieldName], replacer).replace(/\\"/g, '""'))).join(','));


11

अगर कोई इसे डाउनलोड करना चाहता था।
यहाँ एक बहुत ही छोटा फ़ंक्शन है जो JSON ऑब्जेक्ट्स की एक सरणी को csv में बदल देगा, फिर इसे डाउनलोड करें।

downloadCSVFromJson = (filename, arrayOfJson) => {
  // convert JSON to CSV
  const replacer = (key, value) => value === null ? '' : value // specify how you want to handle null values here
  const header = Object.keys(arrayOfJson[0])
  let csv = arrayOfJson.map(row => header.map(fieldName => 
  JSON.stringify(row[fieldName], replacer)).join(','))
  csv.unshift(header.join(','))
  csv = csv.join('\r\n')

  // Create link and download
  var link = document.createElement('a');
  link.setAttribute('href', 'data:text/csv;charset=utf-8,%EF%BB%BF' + encodeURIComponent(csv));
  link.setAttribute('download', filename);
  link.style.visibility = 'hidden';
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
};

फिर इसे इस तरह से कॉल करें:

this.downloadCSVFromJson(`myCustomName.csv`, this.state.csvArrayOfJson)

यह उन चीजों के लिए काम नहीं करता है जब तत्वों में से एक में कोई एकल उद्धरण होता है जैसेCap D'antibes
मिडनाइटडाटक

9

मौजूदा शक्तिशाली पुस्तकालयों के पुन: उपयोग के लिए कई विकल्प उपलब्ध हैं जो मानक आधारित हैं।

यदि आप अपने प्रोजेक्ट में डी 3 का उपयोग करते हैं, तो आप बस इनवॉइस कर सकते हैं:

    d3.csv.formatया d3.csv.formatRowsकार्यों की एक सरणी को सीएसवी स्ट्रिंग में बदलने के लिए।

    d3.csv.formatRows आपको अधिक नियंत्रण देता है कि किन गुणों को सीएसवी में परिवर्तित किया जाता है।

    कृपया d3.csv.format और d3.csv.formatRows देखें विकि पृष्ठों का ।

अन्य लाइब्रेरी भी उपलब्ध हैं जैसे jquery-csv , PapaParse । पापा पारसे की कोई निर्भरता नहीं है - jQuery भी नहीं।

Jquery आधारित प्लगइन्स के लिए, कृपया इसे जांचें


1
यह मेरे लिए बहुत अच्छा काम किया। नोट करें कि 2017 से v3 एपीआई बदल गया है ।v3 (यह वर्तमान में v4 है): github.com/d3/d3-dsv/blob/v1.2.0/README.md#csvFormat
aljabear

6

इन उदाहरणों का प्रयास करें

उदाहरण 1:

JsonArray = [{
    "AccountNumber": "123",
    "AccountName": "abc",
    "port": "All",
    "source": "sg-a78c04f8"

}, {
    "Account Number": "123",
    "Account Name": "abc",
    "port": 22,
    "source": "0.0.0.0/0",
}]

JsonFields = ["Account Number","Account Name","port","source"]

function JsonToCSV(){
    var csvStr = JsonFields.join(",") + "\n";

    JsonArray.forEach(element => {
        AccountNumber = element.AccountNumber;
        AccountName   = element.AccountName;
        port          = element.port
        source        = element.source

        csvStr += AccountNumber + ',' + AccountName + ','  + port + ',' + source + "\n";
        })
        return csvStr;
}

उदाहरण 2:

JsonArray = [{
    "AccountNumber": "1234",
    "AccountName": "abc",
    "inbound": [{
        "port": "All",
        "source": "sg-a78c04f8"
    },
    {
        "port": 22,
        "source": "0.0.0.0/0",
    }]
}]

JsonFields = ["Account Number", "Account Name", "port", "source"]

function JsonToCSV() {
    var csvStr = JsonFields.join(",") + "\n";

    JsonArray.forEach(element => {
        AccountNumber = element.AccountNumber;
        AccountName = element.AccountName;
        
        element.inbound.forEach(inboundELe => {
            port = inboundELe.port
            source = inboundELe.source
            csvStr += AccountNumber + ',' + AccountName + ',' + port + ',' + source + "\n";
        })
    })
    return csvStr;
}

आप निम्न कोड का उपयोग करके csv फ़ाइल भी डाउनलोड कर सकते हैं:

function downloadCSV(csvStr) {

    var hiddenElement = document.createElement('a');
    hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvStr);
    hiddenElement.target = '_blank';
    hiddenElement.download = 'output.csv';
    hiddenElement.click();
}

4
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>JSON to CSV</title>
    <script src="http://code.jquery.com/jquery-1.7.1.js" type="text/javascript"></script>
</head>
<body>
    <h1>This page does nothing....</h1>

    <script type="text/javascript">
        var json3 = {
          "count": 2,
          "items": [{
              "title": "Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust)",
              "description": "Advertise here with BSA Apple cancelled its scheduled sale of iPhone 4S in one of its stores in China’s capital Beijing on January 13. Crowds outside the store in the Sanlitun district were waiting on queues overnight. There were incidents of scuffle between shoppers and the store’s security staff when shoppers, hundreds of them, were told that the sales [...]Source : Design You TrustExplore : iPhone, iPhone 4, Phone",
              "link": "http://wik.io/info/US/309201303",
              "timestamp": 1326439500,
              "image": null,
              "embed": null,
              "language": null,
              "user": null,
              "user_image": null,
              "user_link": null,
              "user_id": null,
              "geo": null,
              "source": "wikio",
              "favicon": "http://wikio.com/favicon.ico",
              "type": "blogs",
              "domain": "wik.io",
              "id": "2388575404943858468"
            },
            {
              "title": "Apple to halt sales of iPhone 4S in China (Fame Dubai Blog)",
              "description": "SHANGHAI – Apple Inc said on Friday it will stop selling its latest iPhone in its retail stores in Beijing and Shanghai to ensure the safety of its customers and employees. Go to SourceSource : Fame Dubai BlogExplore : iPhone, iPhone 4, Phone",
              "link": "http://wik.io/info/US/309198933",
              "timestamp": 1326439320,
              "image": null,
              "embed": null,
              "language": null,
              "user": null,
              "user_image": null,
              "user_link": null,
              "user_id": null,
              "geo": null,
              "source": "wikio",
              "favicon": "http://wikio.com/favicon.ico",
              "type": "blogs",
              "domain": "wik.io",
              "id": "16209851193593872066"
            }
          ]
        };

        const items = json3.items
        const replacer = (key, value) => value === null ? '' : value // specify how you want to handle null values here
        const header = Object.keys(items[0])
        let csv = items.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join(','))
        csv.unshift(header.join(','))
        csv = csv.join('\r\n')

        var link = document.createElement("a");    
        link.id="lnkDwnldLnk";
        document.body.appendChild(link);
        blob = new Blob([csv], { type: 'text/csv' }); 
        var csvUrl = window.webkitURL.createObjectURL(blob);
        var filename = 'UserExport.csv';
        jQuery("#lnkDwnldLnk")
        .attr({
            'download': filename,
            'href': csvUrl
        });
        jQuery('#lnkDwnldLnk')[0].click();
        document.body.removeChild(link);
    </script>
</body>
</html>

1

नए js संस्करणों के लिए ऑब्जेक्ट ओरिएंटेड तरीके से गतिशील रूप से गहरी वस्तुओं के लिए ऐसा करने का एक तरीका है। आपको क्षेत्र के बाद सेपरटॉर्टाइप को बदलना पड़ सकता है।

private ConvertToCSV(objArray) {
    let rows = typeof objArray !== "object" ? JSON.parse(objArray) : objArray;
    let  header = "";
    Object.keys(rows[0]).map(pr => (header += pr + ";"));

    let str = "";
    rows.forEach(row => {
        let line = "";
        let columns =
            typeof row !== "object" ? JSON.parse(row) : Object.values(row);
        columns.forEach(column => {
            if (line !== "") {
                line += ";";
            }
            if (typeof column === "object") {
                line += JSON.stringify(column);
            }  else {
                line += column;
            }
        });
        str += line + "\r\n";
    });
    return header + "\r\n" + str;
}

1

कभी-कभी वस्तुओं की अलग-अलग लंबाई होती है। इसलिए मैं काइल पेनेल की समस्या में भाग गया। लेकिन सरणी को छांटने के बजाय हम बस उस पर चलते हैं और सबसे लंबे समय तक उठाते हैं। पहली बार छांटने पर O (n log (n)) की तुलना में O (n) में समय की जटिलता कम हो जाती है।

मैंने क्रिश्चियन लैंडग्रेन के अपडेटेड ईएस 6 (2016) संस्करण के कोड से शुरुआत की ।

json2csv(json) {
    // you can skip this step if your input is a proper array anyways:
    const simpleArray = JSON.parse(json)
    // in array look for the object with most keys to use as header
    const header = simpleArray.map((x) => Object.keys(x))
      .reduce((acc, cur) => (acc.length > cur.length ? acc : cur), []);

    // specify how you want to handle null values here
    const replacer = (key, value) => (
      value === undefined || value === null ? '' : value);
    let csv = simpleArray.map((row) => header.map(
      (fieldName) => JSON.stringify(row[fieldName], replacer)).join(','));
    csv = [header.join(','), ...csv];
    return csv.join('\r\n');
}

1

मैं ऊपर @Christian Landgren के उत्तर को रोकना चाहता था। मैं उलझन में था कि मेरी CSV फ़ाइल में केवल 3 कॉलम / हेडर क्यों थे। ऐसा इसलिए था क्योंकि मेरे जेन्स में पहले तत्व में केवल 3 कुंजी थी। इसलिए आपको सावधान रहने की जरूरत हैconst header = Object.keys(json[0]) लाइन से । यह माना जाता है कि सरणी में पहला तत्व प्रतिनिधि है। मैंने JSON को गड़बड़ कर दिया था कि कुछ वस्तुओं के कम या ज्यादा होने के साथ।

तो मैंने इसमें एक जोड़ array.sortदिया जो JSON को संख्याओं की संख्या के अनुसार आदेश देगा। इस तरह आपकी CSV फ़ाइल में अधिकतम कॉलम होंगे।

यह भी एक फ़ंक्शन है जिसे आप अपने कोड में उपयोग कर सकते हैं। बस इसे JSON फ़ीड!

function convertJSONtocsv(json) {
    if (json.length === 0) {
        return;
    }

    json.sort(function(a,b){ 
       return Object.keys(b).length - Object.keys(a).length;
    });

    const replacer = (key, value) => value === null ? '' : value // specify how you want to handle null values here
    const header = Object.keys(json[0])
    let csv = json.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join(','))
    csv.unshift(header.join(','))
    csv = csv.join('\r\n')

    fs.writeFileSync('awesome.csv', csv)
}

1

नेनएब्ड वस्तुओं और टैब विभाजक के साथ काम करने के लिए प्रणयबेहल उत्तर से एक अनुकूलन

function ConvertToCSV(objArray) {
  let array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
  if(!Array.isArray(array))
      array = [array];

  let str = '';

  for (let i = 0; i < array.length; i++) {
    let line = '';
    for (let index in array[i]) {
      if (line != '') line += ','

      const item = array[i][index];
      line += (typeof item === 'object' && item !== null ? ConvertToCSV(item) : item);
    }
    str += line + '\r\n';
  }

  do{
      str = str.replace(',','\t').replace('\t\t', '\t');
  }while(str.includes(',') || str.includes('\t\t'));

  return str.replace(/(\r\n|\n|\r)/gm, ""); //removing line breaks: https://stackoverflow.com/a/10805198/4508758
}

1
यह एक्सेल / शीट्स में सीधे कॉपी और पेस्ट करने के लिए एकदम सही काम करता है! धन्यवाद!
यूपी 3

0

Csv लिखें।

function writeToCsv(dataToWrite, callback) {
    var dataToWrite;
    var fs = require('fs');
    dataToWrite = convertToCSV(dataToWrite);
    fs.writeFile('assets/distanceInfo.csv', dataToWrite, 'utf8', function (err) {
      if (err) {
        console.log('Some error occured - file either not saved or corrupted file saved.');
      } else{
        console.log('It\'s saved!');
      }
      callback("data_saved | assets/distanceInfo.csv")
    });
}

function convertToCSV(objArray) {
    var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
    var str = '';
    for (var i = 0; i < array.length; i++) {
        var line = '';
        for (var index in array[i]) {
            if (line != '') line += ','

            line += array[i][index];
        }
        str += line + '\r\n';
    }
    return str;
}

2
मुझे नहीं लगता कि इसका बहुत मूल्य है। कृपया इस बारे में कुछ स्पष्टीकरण जोड़ने के लिए संपादित करें कि यह प्रश्न का उत्तर देने में कैसे मदद कर रहा है।
फेडोरक्वी 'एसओ स्टॉप हर्मिंग'

0

मज़ेदार कुछ भी पूरा नहीं है और न ही यहां काम कर रहा है (आईई और न ही नोड। जेएस)। इसी तरह के सवाल का जवाब, थोड़ा संरचित JSON (मान लें कि इसे फिर से कॉपी करने की कोई आवश्यकता नहीं है), डेमो स्निपेट भी शामिल है। JSON To CSV रूपांतरण (जावास्क्रिप्ट): CSV रूपांतरण को ठीक से कैसे प्रारूपित करें आशा है कि केवल एकल प्रकार कनवर्टर ही नहीं, मेरे गितुब (प्रोफाइल में उल्लेखित) पर भी अनजाने JSON संरचना का विश्लेषण करने के लिए समान है। मैं इस उत्तर में कोड का लेखक हूं और मेरे जीथूब पर सभी कोड (कुछ परियोजनाओं को छोड़कर कांटा / + अनुवाद के रूप में शुरू हुआ)।


0

व्यक्तिगत रूप से मैं ऐसा करने के लिए d3-dsv लाइब्रेरी का उपयोग करूंगा । क्यों reinvent the wheel?


import { csvFormat } from 'd3-dsv';
/**
 * Based on input data convert it to csv formatted string
 * @param (Array) columnsToBeIncluded array of column names (strings)
 *                which needs to be included in the formated csv
 * @param {Array} input array of object which need to be transformed to string
 */
export function convertDataToCSVFormatString(input, columnsToBeIncluded = []) {
  if (columnsToBeIncluded.length === 0) {
    return csvFormat(input);
  }
  return csvFormat(input, columnsToBeIncluded);
}

साथ पेड़ हिला तुम सिर्फ से उस विशेष समारोह आयात कर सकते हैं d3-dsvपुस्तकालय


0

यहाँ CSV ऑब्जेक्ट्स की एक सारणी को परिवर्तित करने का मेरा सरल संस्करण है (उन वस्तुओं को मानकर सभी समान विशेषताएँ साझा करें):

var csv = []
if (items.length) {
  var keys = Object.keys(items[0])
  csv.push(keys.join(','))
  items.forEach(item => {
    let vals = keys.map(key => item[key] || '')
    csv.push(vals.join(','))
  })
}

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