如何将 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
我有一个像这个示例的 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