9

私はクラスを持っています(AそしてB私のオブジェクトです)

public A   {
    private List<B> b;
    private int c;
}

文字列変数tempがあります。したがって、この変数にオブジェクトの JSON 文字列を保存します。どのように?

この2つの方法で試しましたが、結果はありません。

public void save() {
    ObjectMapper mapper = new ObjectMapper();
    String temp = mapper.writeValueAsString(a);
}
public void read(String temp) {
    ObjectMapper mapper = new ObjectMapper();
    A a = mapper.readValue(temp, A.class);
}

どうすれば解決できますか?

4

1 に答える 1

13

コードは、実際のクラスではなく、 Type のインスタンスをメソッドに渡す必要がありますAwriteValueAsString

ObjectMapperリフレクションを介してインスタンスのタイプを判別できますが、インスタンスを渡さない場合、生成された JSON に配置するフィールド値を判別できません。

また、必ず適切な例外をキャッチまたはスローしてください。

public void save() {

try {
        A a = new A();
        ObjectMapper mapper = new ObjectMapper();
        String temp = mapper.writeValueAsString(a);

    } catch (JsonGenerationException e) {
       e.printStackTrace();
    } catch (JsonMappingException e) {
       e.printStackTrace();
    } catch (IOException e) {
       e.printStackTrace();
    }

}

Aclassおよび classのフィールドのアクセサーも必要ですB通知BJackson は、提供するインスタンスのすべてのフィールドをマップできる必要があるため、前の文に含めました。

public A   {
    private List<B> b;
    private int c;

    private B getB(){ return b;}
    private void setB(B b){this.b = b;}
    private int getC(){return c;}
    private void setC(int c){this.c = c;}
}

これは、私がテストした完全な動作例です。

import java.io.IOException;
import java.util.List;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class A {

    private List<B> b;
    private int c;

    public List<B> getB() {
        return b;
    }

    public void setB(List<B> b) {
        this.b = b;
    }

    public int getC() {
        return c;
    }

    public void setC(int c) {
        this.c = c;
    }

    public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
        A a = new A();
        ObjectMapper mapper = new ObjectMapper();
        String temp = mapper.writeValueAsString(a);
        System.out.println(temp);   
    }
}

class B{


}

この簡単な例が機能しない場合、jackson-mapper-asl.jarファイルがビルド パス上にない可能性があります。ここからファイルをダウンロードして、ローカル マシンのどこかに配置します。

次にEclipse経由で、プロジェクトを右クリックしてプロパティを選択します。

次に、[ビルド パス] > [ライブラリ] > [外部 Jar を追加] を選択します。jar を見つけて、[OK] をクリックします。

于 2013-06-26T11:06:45.027 に答える