2015-06-21 4 views
0

У меня есть класс java, уже сериализованный и сохраненный как файл формата .ser, но я хочу получить это преобразование в json-файле (формат .json), это связано с тем, что сериализация кажется неэффективны с точки зрения добавления в прямой форме и, кроме того, приводят к повреждению ошибок, связанных с ошибками потока. Есть ли эффективный способ преобразования этого java-сериализованного файла в формат json.Как преобразовать java-файл в json-файл

+0

Если я правильно вас понимаю, сначала вы хотите сериализовать данные в файл, а затем вы хотите преобразовать сериализованные данные в JSON, потому что сериализация неэффективна? Но вы уже сделали сериализацию и заплатили любую цену, которая приходит с ним именно так. – John

ответ

1

Вы можете прочитать файл .ser как InputStream и карта объекта получено с помощью key/valueGson и запись в файл .json

InputStream ins = new ObjectInputStream(new FileInputStream("c:\\student.ser")); 
      Student student = (Student) ins.readObject(); 
      Gson gson = new Gson(); 

      // convert java object to JSON format, 
      // and returned as JSON formatted string 
      String json = gson.toJson(student); 

     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(); 
      } 
+0

Ручное отображение свойств объекта звучит как много работы. Взгляните на Jackson или Gson, которые обеспечивают автоматическое преобразование JSON POJO <->. – dnault

+0

Правильное ручное сопоставление будет жестким в случае большого количества полей, поэтому обновим код для автоматического преобразования из POJO в 'JSON'. – Arpit

0

В качестве альтернативы сериализации Java и JSON вы можете использовать буферы протокола Google.

В моем ответе в теме пыльник есть обзор того, что ГПБ и как использовать, так что вы можете проверить, что и посмотреть, если он вам подходит:

How to write/read binary files that represent objects?

1

Там нет стандартного способа сделать это в Java а nd также нет серебряной пули - для этого есть много библиотек. Я предпочитаю джексон https://github.com/FasterXML/jackson

ObjectMapper mapper = new ObjectMapper(); 
// object == ??? read from *.ser 
String s = mapper.writeValueAsString(object); 

Вы можете увидеть список библиотек для JSON сериализации/десериализации (для Java и не только для Java) здесь http://json.org/

это потому, что сериализация кажется неэффективным с точки зрения добавления в прямой форме

Не уверен, что JSON является ответом для вас. Не могли бы вы поделиться с нами некоторыми примерами данных и с какими манипуляциями вы с ним работаете?

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