2016-04-14 4 views
0

ファイルを/ srcフォルダに読み書きする必要があります(Eclipseを使用しているので、自動的にsrcフォルダが生成されます)。私は新しい人、新しいものがによって生成されるたびに追加する場所/ srcフォルダ内Gson:/ srcフォルダのjsonファイルを読み込んでオブジェクトを追加します

public class Person { 
    private String name; 
    private String surname; 
... getters, setters and constructors here ... 
} 

、私は、「persons.json」ファイルが必要になります。
は、私はこのようなDOMオブジェクトを持っていますフォーム(スイングGUI)。私は、アプリケーションを開くと、私は、ファイル内のすべての人々をロードしたい

InputStream in = Person.class.getClassLoader().getResourceAsStream("scontrini_oggi.json"); 
String personString = IOUtils.toString(in, "UTF-8"); 
Person[] persons = gson.fromJson(personString, Person.class); 

まず問題:

{ 
    "name": "myname", 
    "surname": "my surname" 
}, 
{ 
    "name": "myname2", 
    "surname": "mysurname 2" 
} 

それは文字列を出力します。それは、このようなファイルでエラーが発生しますpersonString(実際にはファイルを読み込む)ですが、Personオブジェクトに変換しようとするとClassCastExceptionが発生します。
もう一つの問題は、私がPersonオブジェクトを持っていれば、それをファイルに追加したいのですが、これを達成する方法がわかりません。
ありがとうございます!

答えて

0

は、あなたが提供しているファイル

Person[] myTypes = gson.fromJson(personString, Person[].class);

+0

はありがとうございます。私はその方法を試しましたが、それは最初のものを取るだけです。理由はわかりません。 – luca89pe

+0

jsonファイルを制御できるなら、 '['と ']'をラップして配列にすることができます。 ファイルの内容は次のようにする必要があります。 [ //古いファイルの内容 ] –

1

まず、JSONの例のようにあなたのコードを見ては間違ってはいけません。

これは有効なJSONファイルではありません。

{ 
    "name": "myname", 
    "surname": "my surname" 
}, 
{ 
    "name": "myname2", 
    "surname": "mysurname 2" 
} 

これらはコンマで区切られた2つのオブジェクトです。あなたは、オブジェクトのリストをしたい場合は、JSONファイルは次のようにする必要があります

[ 
    { 
    "name": "myname", 
    "surname": "my surname" 
    }, 
    { 
    "name": "myname2", 
    "surname": "mysurname 2" 
    } 
] 

その後、@Ramanの答えのように、あなたは配列を求める必要があります。

これは完全な実例です。

package net.sargue.gson; 

import com.google.gson.Gson; 

import java.util.Arrays; 

public class SO36629514 { 
    private class Person { 
    private String name; 
    private String surname; 

    @Override 
    public String toString() { 
     return "Person{" + "name='" + name + '\'' + 
       ", surname='" + surname + '\'' + 
       '}'; 
    } 
    } 

    public static void main(String[] args) { 
    String json = "[\n" + 
      " {\n" + 
      " \"name\": \"myname\",\n" + 
      " \"surname\": \"my surname\"\n" + 
      " },\n" + 
      " {\n" + 
      " \"name\": \"myname2\",\n" + 
      " \"surname\": \"mysurname 2\"\n" + 
      " }\n" + 
      "]"; 

    Person[] persons = new Gson().fromJson(json, Person[].class); 
    System.out.println("persons = " + Arrays.toString(persons)); 
    } 
} 

そして、これが実行結果です:

persons = [Person{name='myname', surname='my surname'}, Person{name='myname2', surname='mysurname 2'}] 
+0

ありがとうございます、最初の問題は解決したようです。 2番目の問題?ファイルに別の人を追加するソリューションはありますか? ありがとうございます! – luca89pe

+0

人物を配列に追加します。新しい配列を書き込んでファイルを上書きします。さらに詳しい情報が必要な場合は、別の質問をしてください。 – sargue

関連する問題