কীভাবে JSON কে CSV ফর্ম্যাটে রূপান্তর করতে হবে এবং একটি ভেরিয়েবলে সঞ্চয় করতে হবে


106

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

ডেটা দেখে মনে হচ্ছে:

{
  "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

তোমার একটা ভাল কোড আছে যে লাইনটি ডাউনলোড হয় তা উইন্ডো.ওপেন ("ডেটা: পাঠ্য / সিএসভি; চরসেট = ইউটিএফ -8," + এস্কেপ (স্ট্র)) .. আপনার প্রয়োজন না হলে কেবল এড়িয়ে যান। এবং
সিএসভি

সিএসভি JSON হিসাবে একাধিক স্তরের ডেটা (পাশাপাশি) পরিচালনা করতে পারে না। আপনি কীভাবে আপনার জেএসএনকে সিএসভির মতো দেখতে আশা করবেন? 2,Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust), ...?
স্টিফান

আমি আমার ডেটা দেখতে চাই: বেইজিংয়ের মধ্যে অ্যাপল আইফোন 4 এস বিক্রয় বাতিল হয়েছে আমেরিকার বিশৃঙ্খলা (ডিজাইন আপনি বিশ্বাস), বিএসএর সাথে বিজ্ঞাপন এখানে অ্যাপল তার কোনও একটি দোকানে আইফোন 4 এস এর নির্ধারিত বিক্রয় বাতিল করে দিয়েছে .. ,,,,, ইত্যাদি আমি এই প্রারম্ভিক অক্ষরগুলি সহজেই মুছে ফেলতে পারি: "count" গণনা ": 2," আইটেম ": [:"
প্রাণেবেহল

@Zdrsh হ্যাঁ তবে কিছু কারণে আমি এটি কাজে লাগাতে পারছি না।
প্রণেবেহল

উত্তর:


159

সিএসভিতে জসনকে রূপান্তর করার আরও মার্জিত উপায় হ'ল কোনও কাঠামো ছাড়াই মানচিত্রের ফাংশনটি ব্যবহার করা:

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)

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

4
আপনি প্রতি সারিতে একটি রেকর্ড পেতে ক্ষেত্রগুলি.ম্যাপ () এর পরে একটি + "\ r \ n" যুক্ত করতে পারেন। উদ্ধৃত সংখ্যাগুলি পেতে আপনি JSON.stringify (সারি [ফিল্ডনাম]) ব্যবহার করতে পারেন যার পরিবর্তে কেবল স্ট্রিংয়ের উদ্ধৃতি দেওয়া হবে এবং সংখ্যাগুলিকে উদ্ধৃত করা হবে।
ক্রিশ্চিয়ান ল্যান্ডগ্রেন

4
@ সানলিফ: আমি JSON.stringify এর সাথে একটি নতুন উদাহরণ আপডেট করেছি - এতে আপনার বর্ণিত কেসগুলি পরিচালনা করা উচিত।
খ্রিস্টান ল্যান্ডগ্রেন

4
@ ম্যারাথন, ভাল ক্যাচ, পৃথকভাবে নাল কেসগুলি পরিচালনা করতে একটি replacer দিয়ে উদাহরণ আপডেট করেছে। যদি কোনও replacer ব্যবহার করা হয় নাল হিসাবে আউটপুট করা হবে null- এখন উদাহরণগুলি নাল, অপরিজ্ঞাত এবং সংখ্যা উভয়ই সঠিকভাবে পরিচালনা করতে হবে।
ক্রিশ্চিয়ান ল্যান্ডগ্রেন

4
উল্লেখযোগ্য যে এটি এক্সট-এ দেখার সময় \"কিছু ক্ষেত্রগুলি তাদের কলামের "পপ আউট" ব্যবহার করে (যা ""উদ্ধৃতিগুলির জন্য একটি পালানোর চরিত্র হিসাবে পছন্দ করে) বলে ব্যবহার করে কোটায় স্ট্রিংগুলি এড়ায় । আমি আমার উত্তরটিতে উল্লিখিত হিসাবে .replace(/\\"/g, '""')এটি শেষে যুক্ত করে সমাধান করা যেতে পারে JSON.stringify(row[fieldName], replacer)
ব্যবহারকারী 1274820

54

ঠিক আছে আমি শেষ পর্যন্ত এই কোডটি কাজ করেছিলাম:

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

সমস্ত অবদানকারীদের সমস্ত সমর্থন করার জন্য অনেক ধন্যবাদ।

প্রাণে


4
আমি এই চেষ্টা করেছিলাম। আমার তিনটি কলাম রয়েছে তবে
এক্সেলে

4
নীতেশ আপনার ',' একটি ডিলিমিটার হিসাবে নির্দিষ্ট করতে হবে
জেসার ওমরি

এখানে ভাগ করে নেওয়ার জন্য ধন্যবাদ। সবেমাত্র এটি ব্যবহৃত হয়েছে এবং এটি নিখুঁত কাজ করে।
রামিন আরববাগেরি

এর জন্য ধন্যবাদ! লাইনে "[অবজেক্ট অবজেক্ট]" থাকা এড়াতে আমি নিম্নলিখিতগুলি যুক্ত করেছি যদি কোনও ঘরে কোনও বস্তু থাকে। যদি (_.আইসোবজেক্ট (অ্যারে [i] [সূচক])) {অ্যারে [i] [সূচক] = জেএসওন.স্ট্রিংফাই (অ্যারে [i] [সূচক]); । (আন্ডারস্কোর ব্যবহার করে তবে আপনি ভ্যানিলাতে পরিবর্তন করতে পারেন)
क्লেট্রোট্রনিকন

4
@ সুনিল আমি দেখতে পেলাম যে মানগুলিতে কমা রয়েছে, এটি ভেঙে যায়। আমার প্রয়োজনের জন্য আমি কেবল এটি করেছি: var re = new RegExp (',', 'g'); অ্যারে [i] [সূচক] = অ্যারে [i] [সূচী]। টু স্ট্রিং ()। প্রতিস্থাপন (পুনরায়, ';')
ক্লেট্রোটোনন

18

প্রাণয়েবেল দ্বারা খুব সুন্দর সমাধান, তবে যদি কেউ 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

আপনার উত্তর কাজ করছে। তবে কিছু ক্ষেত্রে যেমন কিছু কলাম উপলব্ধ না থাকলে এটি অনুপস্থিত কলামটি বিবেচনা করবে না এবং সেই সারি ডেটার জন্য কলামের ডেটা পুনরায় স্বাক্ষর করবে না।
এসএমএস

আমি এই পদ্ধতিটি কাজ করতে সক্ষম হয়েছি তবে আমাকে কিছু কোড এডিট করতে হয়েছিল: ১. জিকুয়ারি ছাড়াই কাজ করুন: document.getElementById("lnkDwnldLnk").download = filename; document.getElementById("lnkDwnldLnk").href = csvUrl;২. আইই ১১-তে কাজ করুন: if (window.navigator && window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveOrOpenBlob(blob, filename); } else { document.getElementById('lnkDwnldLnk').click(); }
জেসন

17

আমি কেবল ভবিষ্যতে লোকদের জন্য এখানে কিছু কোড যুক্ত করতে চেয়েছিলাম যেহেতু আমি একটি সিএসভি ডকুমেন্টে জেএসএন রফতানি করতে এবং ডাউনলোড করার চেষ্টা করছিলাম।

আমি $.getJSONকোনও বাহ্যিক পৃষ্ঠা থেকে জেএসন ডেটা টানতে ব্যবহার করি তবে আপনার যদি বেসিক অ্যারে থাকে তবে আপনি কেবল এটি ব্যবহার করতে পারেন।

এটি সিএসভি ডেটা তৈরি করতে খ্রিস্টান ল্যান্ডগ্রেনের কোড ব্যবহার করে।

$(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যোগ করে উদ্ধৃতিতে উদ্ধৃতি থেকে মুক্তি পাবেন \"। আপনি যদি সিএসভিটিকে এক্সেলে দেখে থাকেন তবে এটি পলায়ন চরিত্র হিসাবে পছন্দ হয় না।

আপনি যোগ করতে পারেন .replace(/\\"/g, '""')শেষে JSON.stringify(row[fieldName], replacer)(এই প্রতিস্থাপন করবে সীমা অতিক্রম করা এই সঠিকভাবে প্রদর্শন করতে \"সঙ্গে ""যা কি সীমা অতিক্রম করা পছন্দ যায়)।

সম্পূর্ণ লাইন: let csv = items.map(row => header.map(fieldName => (JSON.stringify(row[fieldName], replacer).replace(/\\"/g, '""'))).join(','));


12

যদি কেউ এটি ডাউনলোড করতে চান তবে।
এখানে একটি দুর্দান্ত একটি ফাংশন যা JSON অবজেক্টগুলির একটি অ্যারেটিকে সিএসভিতে রূপান্তরিত করবে, তারপরে এটি ডাউনলোড করবে।

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
মিডনাইটডেটাগীত

10

বিদ্যমান শক্তিশালী লাইব্রেরিগুলিকে পুনরায় ব্যবহার করার জন্য একাধিক বিকল্প রয়েছে যা মানক ভিত্তিক।

আপনি যদি আপনার প্রকল্পে D3 ব্যবহার করেন তবে আপনি কেবলই অনুরোধ করতে পারেন:

    d3.csv.formatবা d3.csv.formatRowsক্রিয়াকলাপগুলি বস্তুর অ্যারেটিকে সিএসভি স্ট্রিংয়ে রূপান্তর করতে পারে।

    d3.csv.formatRows কোন বৈশিষ্ট্য সিএসভিতে রূপান্তরিত হয় তার উপর আপনাকে আরও বেশি নিয়ন্ত্রণ দেয়।

    দয়া করে d3.csv.format এবং d3.csv.formatRows উইকি পৃষ্ঠাগুলি দেখুন।

এছাড়াও অন্যান্য লাইব্রেরি রয়েছে যেমন জ্যাকুয়েরি - সিএসভি , পাপাপার্সের মতো । পাপা পার্সের কোনও নির্ভরতা নেই - এমনকি jQueryও নয়।

Jquery ভিত্তিক প্লাগইনগুলির জন্য, দয়া করে এটি পরীক্ষা করুন


4
এটি আমার জন্য কাজ করে মহান। : নোট থেকে D3 এপিআই 2017.v3 থেকে পরিবর্তিত হয়েছে (এটা বর্তমানে V4) github.com/d3/d3-dsv/blob/v1.2.0/README.md#csvFormat
aljabear

ধন্যবাদ! আমি পাপাপার্সের পাপা.অনপারস (ডেটা) ( প্যাপাপার্স ডকস #json-to- csv ) ব্যবহার করেছি। আমার সমস্যার দ্রুত সমাধান!
ড্যানিয়েল ভ্যালেনজুয়েলা

8

এই উদাহরণ ব্যবহার করে দেখুন

উদাহরণ 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;
}

এমনকি আপনি নিম্নলিখিত কোড ব্যবহার করে সিএসভি ফাইলটি ডাউনলোড করতে পারেন:

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>

2

নেস্টেড অবজেক্টস এবং ট্যাব বিভাজকের সাথে কাজ করার জন্য প্রাণেবেহলের উত্তর থেকে একটি অভিযোজন

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
}

4
এটি সরাসরি এক্সেল / পত্রকগুলিতে অনুলিপি করা এবং আটকানোর জন্য নিখুঁত কাজ করে! ধন্যবাদ!
ইউপি 3

1

নতুন জেএস সংস্করণগুলির জন্য বস্তুমুখী উপায়ে গতিশীল গভীর বস্তুর জন্য এটি করার এক উপায় a অঞ্চলের পরে আপনাকে বিচ্ছিন্নভাবে পরিবর্তন করতে হতে পারে।

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

কখনও কখনও বস্তুর বিভিন্ন দৈর্ঘ্য থাকে। তাই আমি কাইল পেনেলের মতো একই সমস্যায় পড়েছি। তবে অ্যারে বাছাই করার পরিবর্তে আমরা কেবল এটির উপর দিয়ে চলে যাই এবং দীর্ঘতমটি বাছাই করি। প্রথম জটিল বাছাইয়ের সময় ও (এন লগ (এন)) এর তুলনায় সময়ের জটিলতা ও (এন) এ হ্রাস পায়।

আমি ক্রিশ্চিয়ান ল্যান্ডগ্রেনের আপডেট হওয়া ES6 (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

আমি উপরে ক্রিশ্চিয়ান ল্যান্ডগ্রেনের উত্তরটি বন্ধ করে দিতে চেয়েছি। আমার CSV ফাইলে কেন কেবল 3 টি কলাম / শিরোনাম ছিল আমি বিভ্রান্ত হয়ে পড়েছিলাম। এটি ছিল কারণ আমার জসনে প্রথম উপাদানটিতে কেবল 3 টি কী ছিল। সুতরাং আপনার const header = Object.keys(json[0])লাইনটি সম্পর্কে সতর্কতা অবলম্বন করা উচিত । এটি ধরে নেওয়া হচ্ছে যে অ্যারের প্রথম উপাদানটি প্রতিনিধি। আমার কাছে অগোছালো জেএসওএন ছিল যা কিছু বস্তুর কম-বেশি ছিল।

সুতরাং আমি এটিতে একটি যুক্ত করেছি array.sortযা কী সংখ্যার দ্বারা জেএসএনকে আদেশ করবে। সুতরাং আপনার 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

এখানে 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') 

0

সিএসভি লিখুন

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

4
আমি মনে করি না এর খুব বেশি মূল্য আছে। দয়া করে সম্পাদন করা কিভাবে এই প্রশ্নের উত্তর দিতে সহায়তা করছে কিছু ব্যাখ্যা যোগ করতে।
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

0

মজার কিছুই এখানে পূর্ণ বা কাজ করা নয় (আইই বা নোড.জেএস)। অনুরূপ প্রশ্নের উত্তর, কিছুটা কাঠামোগত 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গ্রন্থাগার

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