2016-09-15 7 views
0

Ich versuche, meinen Code auszuführen, und ich bekomme immer Fehler. Die JSON-Datei, die ich lese, ist völlig in Ordnung mit den Schlüsseln und Werten. Und die, die ich schreibe, ist nur eine JSON-Datei mit "{}" und das war's. Bitte hilf mir. Es ist der einzige Fehler, den ich bekomme.JSON-Fehler beim Schreiben auf

Hauptklasse

import java.io.Serializable; 

class LibraryOfMovieDescriptions implements Serializable { 
    public static void main(String[] args){ 

    MovieLibrary movieLibrary; 
    movieLibrary = new MovieLibrary("movies.json"); 

    movieLibrary.toJsonFile("movies2.json"); 
} 
} 

MovieDescription Klasse

import org.json.JSONException; 
import org.json.JSONObject; 
import org.json.JSONArray; 
import java.io.Serializable; 

public class MovieDescription implements Serializable { 

private String title; 
private String rating; 
private String release; 
private String runtime; 
private String plot; 
private String filename; 
private String genre; 
private String actors; 

public JSONObject toJSONObject() throws JSONException { 
    JSONObject obj = new JSONObject(); 
    obj.put("Title", title); 
    obj.put("Rated", rating); 
    obj.put("Released", release); 
    obj.put("Runtime", runtime); 
    obj.put("Plot", plot); 
    obj.put("Filename", filename); 


    JSONArray a = new JSONArray(); 
    String[] sArray = this.actors.split(" , "); 
    for(int i = 0; i < sArray.length; i++){ 
     a.put(i); 
    } 
    obj.put("Actors", a); 

    JSONArray g = new JSONArray(); 
    String[] gArray = this.genre.split(" , "); 
    for(int i = 0; i < gArray.length; i++){ 
     g.put(i); 
    } 
    obj.put("Genre", g); 

    return obj; 
} 

public MovieDescription(JSONObject jsonObj) throws JSONException{    
    this.title = jsonObj.getString("Title");  
    this.rating = jsonObj.getString("Rated"); 
    this.release = jsonObj.getString("Released"); 
    this.plot = jsonObj.getString("Plot"); 
    this.runtime = jsonObj.getString("Runtime"); 
    this.filename = jsonObj.getString("Filename"); 

    JSONArray g = jsonObj.getJSONArray("Genre"); 
    for(int i = 0; i < g.length(); i++){ 
     this.genre += g.get(i) + ", "; 
    } 

    JSONArray a = jsonObj.getJSONArray("Actors"); 
    for(int i = 0; i < a.length(); i++){ 
     this.actors += a.get(i) + ", "; 
    } 
} 

public MovieDescription(){ 
    title = " "; 
    rating = " "; 
    release = " "; 
    runtime = " "; 
    plot = " "; 
    filename = " "; 
    genre = " "; 
    actors = " "; 
} 

public MovieDescription(String title, String rating, String release, String runtime, String plot, String filename, 
         String genre, String actors){ 
    this.title = title; 
    this.rating = rating; 
    this.release = release; 
    this.runtime = runtime; 
    this.plot = plot; 
    this.filename = filename; 
    this.genre = genre; 
    this.actors = actors; 
} 

public void setTitle(String title){ 
    this.title = title; 
} 

public String getTitle(){ 
    return title; 
} 

public void setRating(String rating){ 
    this.rating = rating; 
} 

public String getRating(){ 
    return rating; 
} 

public void setRelease(String release){ 
    this.release = release; 
} 

public String getRelease(){ 
    return this.release; 
} 

public void setRuntime(String runtime){ 
    this.runtime = runtime; 
} 

public String getRuntime(){ 
    return runtime; 
} 

public void setPlot(String plot){ 
    this.plot = plot; 
} 

public String getPlot(){ 
    return plot; 
} 

public void setFilename(String filename){ 
    this.filename = filename; 
} 

public String getFilename(){ 
    return filename; 
} 

public void setGenre(String genre){ 
    this.genre = genre; 
} 

public String getGenre(){ 
    return genre; 
} 

public void setActors(String actors){ 
    this.actors = actors; 
} 

public String getActors(){ 
    return actors; 
} 

public String toString(){ 
    String string = ("Title: " + title + "\n" + "Rating: " + rating + "\n" + "Released: " + release + "\n" + 
    "Runtime: " + runtime + "\n" + "Plot: " + plot + "\n" + "Filename: " + filename + "\n" + "Genre: " + genre 
    + "\n" + "Actors: " + actors + "\n"); 

    return string; 
} 

} 

MovieLibrary Klasse

import org.json.JSONObject; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import org.json.JSONTokener; 
import java.io.Serializable; 
import java.io.ObjectOutputStream; 

public class MovieLibrary implements Serializable { 

private List<MovieDescription> movieLib = new ArrayList<MovieDescription>(); 

private int arraySize; 

public MovieLibrary(){ 
    arraySize = 0; 
} 

public boolean isEmpty(){ 
    return arraySize == 0; 
} 

public MovieDescription get(String aTitle){ 
    int i = indexOf(aTitle); 
    if(i == -1){ 
     return null; 
    } 
    return movieLib.get(i); 
} 

public boolean add(MovieDescription aClip){ 
    movieLib.add(aClip); 
    arraySize++; 
    return true; 
} 

public boolean remove(String aTitle){ 
    int i = indexOf(aTitle); 
    if(i != -1){ 
     movieLib.remove(i); 
     arraySize--; 
    } 
    return true; 
} 

public String[] getTitles(){ 
    String[] s = new String[movieLib.size()]; 
    for(int i = 0; i < movieLib.size(); i++){ 
     s[i] = movieLib.get(i).getTitle(); 
    } 
    return s; 
} 

private int indexOf(String aTitle){ 
    for(int i = 0; i < movieLib.size(); i++) 
     if(((movieLib.get(i)).getTitle()).equals(aTitle)){ 
      return i; 
     } 
    return -1; 
} 

public MovieLibrary(String jsonFile){ 

    FileInputStream in = null; 
    JSONObject jsonObj = null; 
    String[] titles; 

    try{   
     in = new FileInputStream(jsonFile); 
     jsonObj = new JSONObject(new JSONTokener(in)); 
     titles = JSONObject.getNames(jsonObj); 
     System.out.println("Adding Movies..."); 
     for(int i = 0; i < titles.length; i++){ 
      JSONObject temp = jsonObj.getJSONObject(titles[i]); 
      MovieDescription movies = new MovieDescription(temp); 
      movieLib.add(movies); 
     } 
     System.out.println(this.getTitles()); 
     in.close();   
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
     if(in != null){ 
      try{ 
       in.close(); 
      } 
      catch(IOException z){ 
       z.printStackTrace(); 
       System.exit(0);; 
      } 
     } 
    } 
} 

public void toJsonFile(String jsonFileName){ 

    JSONObject jsonObj = new JSONObject(); 
    ObjectOutputStream out = null; 

    try{ 
     for(int i = 0; i < movieLib.size(); i++) 
      jsonObj.put(movieLib.get(i).getTitle(),movieLib.get(i).toJSONObject()); 
     out = new ObjectOutputStream(new FileOutputStream(jsonFileName));  
     out.writeObject(jsonObj.toString()); 
     out.close(); 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
     if(out != null){ 
      try{ 
      out.close(); 
      } 
      catch(IOException z){ 
       z.printStackTrace(); 
       System.exit(0); 
      } 
     } 
    } 


} 
} 

Und hier ist der Fehler Ich erhalte:

Hinzufügen Filme ...

[Ljava.lang.String; @ 4554617c

Auch nachdem ich das Programm und überprüfen Sie meine "movies2.json" (die schreiben ich versuche laufen to) die Datei dreht sich darum.

weird stuff:

enter image description here

Antwort

0

Die erste Nachricht ist, weil System.out.println ein Array von Strings übergeben wird (this.getTitles()). Um dieses Array von Zeichenfolgen anzuzeigen, müssen Sie es in eine einzelne Zeichenfolge konvertieren Arrays.toString(this.getTitles()), oder verwenden Sie eine for-Schleife, die auf dem Array iteriert, um einen Titel pro Zeile anzuzeigen.

Die falsche Ausgabe ist, weil ObjectOutputStream ein Ausgabestream zum Serialisieren von Java-Objekten (obwohl es in diesem Fall ein String-Objekt ist) binär ist. FileWriter sollte eine bessere Option sein, da die API es Ihnen ermöglicht, Zeichen in eine Datei zu schreiben.

Verwandte Themen