2015-02-11 13 views
1

Я пытаюсь преобразовать java-объект в json. У меня есть класс java, который читает определенный столбец из текстового файла. И я хочу сохранить этот столбец чтения в формате json.конвертировать java-объект в json

Вот мой код. Я не знаю, где я ошибаюсь.

Заранее спасибо.

File.java

public class File { 

    public File(String filename) 
      throws IOException { 
     filename = readWordsFromFile("c:/cbir-2/sample/aol.txt"); 
    } 

    public String value2; 

    public String readWordsFromFile(String filename) 
      throws IOException { 
     filename = "c:/cbir-2/sample/aol.txt"; 
     // Creating a buffered reader to read the file 
     BufferedReader bReader = new BufferedReader(new FileReader(filename)); 
     String line; 
     //Looping the read block until all lines in the file are read. 

     while ((line = bReader.readLine()) != null) { 
      // Splitting the content of tabbed separated line 
      String datavalue[] = line.split("\t"); 
      value2 = datavalue[1]; 
      // System.out.println(value2); 
     } 

     bReader.close(); 

     return "File [ list=" + value2 + "]"; 
    } 
} 

GsonExample.java

import com.google.gson.Gson; 

public class GsonExample { 
    public static void main(String[] args) 
      throws IOException { 
     File obj = new File("c:/cbir-2/sample/aol.txt"); 
     Gson gson = new Gson(); 
     // convert java object to JSON format, 
     // and returned as JSON formatted string 
     String json = gson.toJson(obj); 

     try { 
      //write converted json data to a file named "file.json" 
      FileWriter writer = new FileWriter("c:/file.json"); 
      writer.write(json); 
      writer.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     System.out.println(json); 
    } 
} 
+0

Aaaaand, что происходит при запуске кода? –

+0

Это дает мне arrayoutof bound exception. Когда я только что выполнил File.java, он отобразил мне этот столбец. но не смог сохранить этот столбец в GsonExample. его давая ошибки – veena

+0

** Где ** дает ли это исключение? –

ответ

0

Похоже, вы могли бы быть перезапись значение2 для каждой строки.

value2= datavalue[1]; 

EDIT: Можете ли вы сделать value2 a List и добавить к нему.

value2.add(datavalue[1]); 

EDIT2: Перед использованием необходимо проверить размер массива.

if (datavalue.length >= 2){ 
    value2.add(datavalue[1]); 
} 
+1

Спасибо, ребята, что он работает отлично :) Я мог бы преобразовать его в формат json – veena

3

Я рекомендую вам использовать Джексон Высокопроизводительный процессор JSON.

из http://jackson.codehaus.org/

здесь образец из их обучающей

Наиболее общеупотребительным это взять кусок JSON и построить Plain Old Java Object («POJO») из него. Итак, начнем. С простым 2-свойством POJO:

// Примечание: можно использовать геттеры/сеттеры; здесь мы используем только открытые поля непосредственно:

public class MyValue { 
    public String name; 
    public int age; 
    // NOTE: if using getters/setters, can keep fields `protected` or `private` 
} 

нам потребуется экземпляр com.fasterxml.jackson.databind.ObjectMapper, используемый для всех привязки данных, так что давайте построим один:

ObjectMapper mapper = new ObjectMapper(); // create once, reuse 

Экземпляр по умолчанию отлично подходит для нашего использования - в дальнейшем мы узнаем, как настроить экземпляр сопоставления, если это необходимо.Способ применения прост:

MyValue value = mapper.readValue(new File("data.json"), MyValue.class); 
// or: 
value = mapper.readValue(new URL("http://some.com/api/entry.json"), MyValue.class); 
// or: 
value = mapper.readValue("{\"name\":\"Bob\", \"age\":13}", MyValue.class); 

И если мы хотим, чтобы написать JSON, мы делаем обратное:

mapper.writeValue(new File("result.json"), myResultObject); 
// or: 
byte[] jsonBytes = mapper.writeValueAsBytes(myResultObject); 
// or: 
String jsonString = mapper.writeValueAsString(myResultObject); 

Обработка файла, которые имеют информацию в столбцах, как в CSV Я рекомендую для этой задачи используйте opencsv здесь приведен пример информации в 5 столбцах, разделенных символом '|'

import com.opencsv.CSVReader; 
import pagos.vo.UserTransfer; 

import java.io.*; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by anquegi on 
*/ 
public class CSVProcessor { 

    public List<String[]> csvdata = new ArrayList<String[]>(); 

    public CSVProcessor(File CSVfile) { 

     CSVReader reader = null; 

     try { 
      reader = new CSVReader(new FileReader(CSVfile),'|'); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      Logger.error("Cannot read CSV: FileNotFoundException"); 
     } 
     String[] nextLine; 
     if (reader != null) { 
      try { 
       while ((nextLine = reader.readNext()) != null) { 
        this.csvdata.add(nextLine); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
       Logger.error("Cannot read CSV: IOException"); 
      } 
     } 


    } 



    public List<TransfersResult> extractTransfers() { 

     List<TransfersResult> transfersResults = new ArrayList<>(); 


     for(String [] csvline: this.csvdata){ 

      if(csvline.length >= 5){ 
      TransfersResult transfersResult = new TransfersResult(csvline[0] 
        ,csvline[1],csvline[2],csvline[3],csvline[4]); 

      // here transfersResult is a pojo java object 
      } 

     } 

     return transfersResults; 

    } 

} 

и возвращает JSON из сервлета это решается в этом вопросе в StackOverflow

How do you return a JSON object from a Java Servlet

+0

Gson делает хорошие преобразования в JSON. Вы говорите, что проблема связана с Gson против кода? –

+0

это нормально, но я хочу читать из файла. У меня есть 4 столбца Id, Query, time, Url. И я хочу, чтобы колонка запроса была помещена в json-формате. Также я не очень разбираюсь в коде. – veena

+0

Если ваш файл находится в этом формате, я думаю, что вы должны использовать opencsv для чтения этого файла, будет лучше, если у вас есть данные в формате столбца в этом файле – anquegi

0

Причиной исключения может быть значение2 = datavlue [1];

означает, что во время первого выполнения цикла while вы пытаетесь присвоить элемент seconds (datavalue [1]) в массиве String значение value2, которое не создано then.So его предоставление этого исключения.

+0

да. как я могу его решить. – veena

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