0

カスタムクラスとfloat値のJSONObjectからを作成する必要があります。私はそれがうまくいくことを期待して以下のコードを試しました:HashMaptoString

public class MyClass {
    ...
    public String toString() {
        return "a nice string"
    }
}


HashMap<MyClass,Float> map = new HashMap<MyClass,Float>();
map.put(...);

JSONObject json = new JSONObject(map);

しかし、私は得ます:

java.lang.ClassCastException: MyClass cannot be cast to java.lang.String

これを作成するための最良の方法は何JSONObjectですか?ありがとう。

4

3 に答える 3

2

これを変更する必要があります:

HashMap<MyClass,Float> map = new HashMap<MyClass,Float>();

HashMap<String,Float> map = new HashMap<String,Float>();

あなたが言ったように「カスタムクラスのtoStringとfloat値のHashMap

値をハッシュマップにどのように入れているかについては言及していません。

ただしtoString、カスタム クラスのメソッドを使用する場合は、次のように配置する必要があります。

MyClass m = new MyClass();
map.put(m.toString,123.45f);
于 2013-02-19T17:34:11.467 に答える
1

org.jsonライブラリを使用しているようです。クラスのコードを見るとJSONObject、明らかにジェネリックを使用していません。

public JSONObject(Map map) {
    this.map = new HashMap();
    if (map != null) {
        Iterator i = map.entrySet().iterator();
        while (i.hasNext()) {
            Map.Entry e = (Map.Entry)i.next();
            Object value = e.getValue();
            if (value != null) {
                this.map.put(e.getKey(), wrap(value));
            }
        }
    }
}

このマップは、一意のキーを管理するために使用するマップの外観から、Stringキーと値を持つエントリを処理しているようです。コメントでは、それはまた次のように述べています:ObjectkeyPoolString

これは、JSONObject.put(string、object)によって使用されます。

したがって、JSONオブジェクトのキーはであると想定するのが正しいでしょうStrings

MyClassタイプをString直接アップキャストすることはできません(のStringスーパークラスではありませんMyClass)。そのため、コンストラクターはフォームのマップを必要とするため、実際にマップについて不平を言っていますHashMap<String,Object>(とに問題はないことに注意してくださいFloatObject

この問題を修正するには、を使用して、オブジェクトの表現をHashMap<String,Float>格納する場所を定義する必要があります。StringMyClasstoString

を使用できない場合は、で表されるコードを特定のオブジェクトにStringマップする中間構造の使用を検討できるため、クラスを保持できます。StringMyClassMyClass

于 2013-02-19T17:48:26.977 に答える
0

GambとAbuの両方の答えは正しく、最終結果を得るのに役立ちました。

私はこのように私の問題を解決しました:

HashMap<MyClass,Float> obj = functionThatReturnsThisStructure();

JSONObject jsonObj = new JSONObject();

for (Entry<MyClass,Float> entry: obj.entrySet()) {
    jsonObj.put(entry.getKey().toString(), entry.getValue());
}
于 2013-02-19T18:03:12.287 に答える