如何将 csv 转换为该格式的 json 文件?

How can I convert csv to json file in that form?

我有一个像这个示例的 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]}

你知道我该怎么做吗?

尝试使用 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

在不知道您使用的是哪种语言的情况下很难回答这个问题,但对于大多数人来说,总体思路应该是相同的。 我会采用逐行读取 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 代码示例,但您应该明白了。

你可以使用这个CSV to JSON Converter做你想做的事。

单击 Examples,然后选择 Headerless Indexed。这将加载基于此问题的示例。然后点击转换。驱动此转换的主要设置是 输出类型 字典数组

PS: 您输入的分隔符(1 到 3 个字符的空格)有点不一致。我猜这是将其复制粘贴到此处的结果,并且原始文件使用制表符作为分隔符。

免责声明:我构建了这个工具。

这是一个使用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。

假设您不需要编程解决方案:

CsvCruncher 将 CSV 作为 SQL table 让我们做一个 SELECT,将结果导出为 CSV 或 JSON。 github.com/OndraZizka/csv-cruncher

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

它没有给出您需要的格式,但是您可以使用一些 JavaScript 来更改数据结构。

在javascript

index.html

file as input

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

app.js

Converting csv data to 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 !");
   }
}

Window 的 用户可以使用 Powershell 3.0 控制台将 INPUTFILE.csv 转换为 OUTPUTFILE.json 通过使用下面的 命令。

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