如何将csv转换为该表单中的json文件?

时间:2016-07-28 12:21:29

标签: json csv data-conversion

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

你有什么想法我怎么能这样做?

6 个答案:

答案 0 :(得分:1)

尝试使用此工具: http://www.convertcsv.com/csv-to-json.htm

玩一些参数...

答案 1 :(得分:0)

如果不知道你使用哪种语言就很难回答这个问题,但对大多数人来说,总体思路应该是一样的。 我会采用逐行读取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代码示例,但你应该明白这一点。

答案 2 :(得分:0)

您可以使用此CSV to JSON Converter来执行您想要的操作。

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

PS:您的输入在分隔符方面有点不一致(空格范围为1到3个字符)。我猜这是复制粘贴它的结果,原始文件有标签作为分隔符。

免责声明:我制作了这个工具。

答案 3 :(得分:0)

以下是使用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。

答案 4 :(得分:0)

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

CsvCruncher将CSV作为SQL表,让我们进行SELECT,将结果导出为CSV或JSON。 github.com/OndraZizka/csv-cruncher

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

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

答案 5 :(得分:0)

在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 !");
   }
}