我有一个像这样的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]}
你有什么想法我怎么能这样做?
答案 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 !");
}
}