2016-09-15 99 views
0

我正在尝试运行我的代码,并且一直收到错误消息。我正在阅读的json文件与键和值完全一致。而我试图写出来的只是一个带有“{}”的json文件,就是这样。请帮帮我。这是我得到的唯一的错误。写入时出现JSON错误

主类

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类

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类

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


} 
} 

这里是我得到的错误:

添加电影......

[Ljava.lang.String; @ 4554617c

另外,我运行该程序,并检查了我的 “movies2.json” 后(一个我想写到)文件变成这个。

怪异的东西:

enter image description here

回答

0

第一消息是因为System.out.println传递字符串数组(this.getTitles())。要显示这个字符串数组,必须将其转换为单个字符串Arrays.toString(this.getTitles()),或者使用循环迭代的for循环在每行显示一个标题。

错误的输出是因为ObjectOutputStream是一个输出流,用于序列化二进制Java对象(即使在这种情况下它是一个String对象)。 FileWriter应该是一个更好的选择,因为它的API允许您将文字写入文件。