2016-07-28 2 views
1

У меня есть CSV-файл, как этот образец:Как преобразовать csv в json-файл в эту форму?

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

Что вы пробовали? Пожалуйста, покажите свой код. – Soviut

ответ

1

пытаются использовать этот инструмент: http://www.convertcsv.com/csv-to-json.htm

Поиграйте с параметрами ...

+1

Можете ли вы дать дополнительный намек? – fao

+1

Направления: Возможно, вам придется изменить запятую на периоды ввода, в зависимости от ваших настроек локали. 1. Вставьте данные в область ввода. 2. Параметры ввода - полевой разделитель - это пробел и снимите флажок First Row Header 3. В шаге Шаг 4 - установите Top, чтобы быть {lb} {br}, Повторяющийся раздел должен быть «{f1}»: [{f2}, {f3 }, {f4}, {f5}] и Bottom to {br} {rb}, затем нажмите Convert Csv на JSON через шаблон. – dataman

+0

@ dataman - отличный дополнительный намек :) –

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); 
    } 

Это просто пример Судо кода, но вы должны получить точку.

0

Вы можете использовать это CSV to JSON Converter, чтобы делать то, что хотите.

Нажмите на Примеры, а затем выберите Без заголовка. Это загрузит пример, основанный на этой проблеме. Затем нажмите «Преобразовать». Основной настройкой, которая управляет этим преобразованием, является Тип выхода из Словарь Array.

PS: Ваш ввод немного несогласован с точки зрения разделителей (пробелы от 1 до 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 в конце - это только более компактный JSON для этого примера переполнения стека.

Смежные вопросы