如何将csv转换为json文件?

guz6ccqo  于 2023-04-27  发布在  其他
关注(0)|答案(7)|浏览(141)

我有一个类似于这个示例的Csv文件:

0   -8,396  13,414  -35,891 39,22489124
1   -8,789  12,768  -35,891 39,09516883
2   -9,136  12,768  -35,891 39,17463722
3   -9,614  12,768  -35,891 39,2888623
4   -9,614  12,397  -36,282 39,52844709
5   -9,614  12,397  -36,282 39,52844709

我需要将其转换为以下格式的JSON文件:

{"0": [-12.770680147058824, 1.846047794117647, -54.265625, 55.77863587895704], 
"1": [-18.388229927007298, 6.5360401459854014, -52.65647810218978, 56.156491225545878], 
"2": [-20.042738970588236, 12.849264705882353, -46.678308823529413, 52.399231898471129], 
"3": [-38.242244525547449, 15.836222627737227, -40.48357664233577, 57.897972254845804], 
"4": [-33.016879562043798, 6.3001824817518246, -38.179288321167881, 50.867127813832226]}

你有什么想法我怎么能做到这一点?

8wtpewkr

8wtpewkr1#

尝试使用this tool(使用一些参数)或以下JavaScript代码:

csv.split(/\n/).map(l=>{[n,...a]=l.split(/ +/),out[n]=a.map(x=>+x.replace(',','.'))})
let out={}, csv= `0   -8,396  13,414  -35,891 39,22489124
1   -8,789  12,768  -35,891 39,09516883
2   -9,136  12,768  -35,891 39,17463722
3   -9,614  12,768  -35,891 39,2888623
4   -9,614  12,397  -36,282 39,52844709
5   -9,614  12,397  -36,282 39,52844709`;

csv.split(/\n/).map(l=> {[n,...a]=l.split(/ +/),out[n]=a.map(x=>+x.replace(',','.'))});

console.log(JSON.stringify(out,0,4));

要将其作为文件下载,请使用this

x7yiwoj4

x7yiwoj42#

下面是使用jq的解决方案

reduce (
    split("\n")[]           # split string into lines
  | split("\t")             # split into columns
  | select(length>0)        # eliminate blanks
  | map(gsub(",";"."))      # change decimal character
) as $r (
  {}
; .[$r[0]] = $r[1:]         # build requested result 
)

如果filter.jq包含此筛选器,并且data包含制表符分隔的数据

0   -8,396  13,414  -35,891 39,22489124
1   -8,789  12,768  -35,891 39,09516883
2   -9,136  12,768  -35,891 39,17463722
3   -9,614  12,768  -35,891 39,2888623
4   -9,614  12,397  -36,282 39,52844709
5   -9,614  12,397  -36,282 39,52844709

然后,采样数据

$ jq -M -R -r -s -f filter.jq data | \
  sed -e ':a' -e 'N' -e '$!ba' \
      -e 's/",\n   /",/g' \
      -e 's/\[\n   /\[/g' \
      -e 's/\n  \]/\]/g'

产生

{
  "0": [ "-8.396", "13.414", "-35.891", "39.22489124"],
  "1": [ "-8.789", "12.768", "-35.891", "39.09516883"],
  "2": [ "-9.136", "12.768", "-35.891", "39.17463722"],
  "3": [ "-9.614", "12.768", "-35.891", "39.2888623"],
  "4": [ "-9.614", "12.397", "-36.282", "39.52844709"],
  "5": [ "-9.614", "12.397", "-36.282", "39.52844709"]
}

请注意,最后的sed只是为了在这个Stack Overflow示例中呈现更紧凑的JSON。

icomxhvb

icomxhvb3#

在javascript中
index.html
文件作为输入

<input type="file" id="csvFileInput" onchange="handleFiles(this.files)" accept=".csv">

app.js
将CSV数据转换为JSON

function handleFiles(files) {
   if (window.FileReader) {
    getText(files[0]);
   } else {
    alert('FileReader are not supported in this browser.');
  }
}

function getText(fileToRead) {
    var reader = new FileReader(); 
    reader.readAsText(fileToRead);
    reader.onload = loadHandler;
    reader.onerror = errorHandler;
}

 function loadHandler(event) {
    var csv = event.target.result;
    process(csv);
 }

 function process(csv) {

     // Newline split
     var lines = csv.split("\n");

     result = [];

     var headers = lines[0].split(",");

     for (var i = 1; i < lines.length - 1; i++) {

        var obj = {};

        //Comma split
        var currentline = lines[i].split(",");

        for (var j = 0; j < headers.length; j++) {
           obj[headers[j]] = currentline[j];
        }

        result.push(obj);

    }

    // OUTPUT
    console.log(result);

}

function errorHandler(evt) {
   if (evt.target.error.name == "NotReadableError") {
       alert("Canno't read file !");
   }
}
brgchamk

brgchamk4#

在不知道你使用的是哪种语言的情况下很坚韧回答这个问题,但是对于大多数人来说,一般的想法应该是一样的。我会采取逐行阅读CSV文件的方法,比如:

JSONObject jsn = new JSONObject()
    for(line in csvfile){
        List lst = new ArrayList();
        String[] temp = line.split(","); //as it should be comma separated
        for(int i=1;i<temp.len;++i){
            lst.add(temp[i]);
        }
        jsn.put(temp[0], list);
    }

这只是一个sudo代码示例,但你应该明白这一点。

mpgws1up

mpgws1up5#

你可以使用这个CSV to JSON Converter做你想做的事情。
点击【示例】,然后选择【无标题索引】,将加载基于此问题的示例,然后点击【转换】,驱动此转换的主要设置为【字典数组】的【输出类型】。

**PS:**您输入的分隔符有点不一致(空格1 - 3个字符),我猜是复制粘贴到这里的结果,原文件的分隔符是制表符。
免责声明:我做了这个工具。

93ze6v8z

93ze6v8z6#

假设你不想要一个编程解决方案:
CsvCruncher将CSV作为SQL表,让您执行SELECT,将结果导出为CSV或JSON。github.com/OndraZizka/csv-cruncher

crunch -in <inputFile>.csv -out <outputFile>.json --json -sql "SELECT * FROM <inputFile>"

它没有给予你需要的确切格式,但是你可以使用一点JavaScript来改变数据结构。

8dtrkrch

8dtrkrch7#

Windows的用户可以使用Powershell3.0控制台,通过下面的命令将INPUTFILE.csv转换为OUTPUTFILE.json

c:\> $jsonData = import-csv .\INPUTFILE.csv | ConvertTo-Json -depth 100 
                                            | Out-File .\OUTPUTFILE.json

相关问题