写入

时间:2016-09-15 04:44:06

标签: java json

我正在尝试运行我的代码而且我一直在收到错误。我读入的json文件完全没有键和值。我试图写出的那个只是一个带有" {}"的json文件。就是这样。请帮我。这是我遇到的唯一错误。

MAIN CLASS

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

此外,在我运行程序并检查我的&#34; movies2.json&#34; (我试图写的那个)文件转向了这个。

奇怪的东西:

enter image description here

1 个答案:

答案 0 :(得分:0)

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

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