2016-10-07 8 views
2

私はラボ割り当てに取り組んでいます。最初の部分ではJSONデータをJavaで書き出すために単純なJSONライブラリを実装する必要があります。JSONライブラリJava-ToString関数の実装

今、私はJSONobject toString()関数についていません。それはファイルに保存されている、または転送することができるので、私はtoStringメソッド

が、私はすでに、私はエラーが出ているとを使用する必要があり、そのため

ライブラリは、HTTPを使用してテキスト表現にJSONモデルをエクスポートすることができなければなりません、誰かがこれは私のJsonObjectクラスです

ToString関数で私を助けることができる:ここ

import java.util.LinkedHashMap; 

public class JsonObject extends LinkedHashMap<String, JsonValue> implements JsonValue { 


    @Override 
    public JsonObject asObject(){ 

     return this; 
    } 

    public void put(String key, int i){ 

     JsonPrimitive jsonprim = new JsonPrimitive(i); 
     this.put(key, jsonprim); 


    } 

    public void put(String key, boolean b){ 

     JsonPrimitive jsonprim = new JsonPrimitive(b); 
     this.put(key, jsonprim); 

    } 
    public void put(String key, double d){ 

     JsonPrimitive jsonprim = new JsonPrimitive(d); 
     this.put(key, jsonprim); 

    } 

    public void put(String key, String string){ 

     JsonPrimitive jsonprim = new JsonPrimitive(string); 
     this.put(key, jsonprim); 

    } 

    public JsonValue get(String key){ 
     throw new UnsupportedOperationException(
       "Cannot return JsonValue of type " + this.getClass().getSimpleName() + "as string"); 

    } 

    public boolean has(String key) { 
     throw new UnsupportedOperationException(
       "Cannot return JsonValue of type " + this.getClass().getSimpleName() + "as string"); 

    } 

    public JsonValue get(int index) { 
    return this.get(index); 
    } 

そして、私は

にこだわっているのtoStringあります
public String toString() { 

     return this.toString(); 
    } 
} 

& mainメソッド

public static void main(String[] args) { 
     //Create a nested JSON object containing user records 
     JsonArray userRecords = new JsonArray(); 
     userRecords.add(new JsonObjectBuilder() 
       .add("id", 1) 
       .add("name", "John Doe") 
       .add("address", new JsonObjectBuilder() 
         .add("street", "Abbey Road") 
         .add("number", 7) 
         .add("city", "London")) 
       .build()); 

    userRecords.add(new JsonObjectBuilder() 
      .add("id", 2) 
      .add("name", "Jane Doe") 
      .add("address", new JsonObjectBuilder() 
        .add("street", "Abbey Road") 
        .add("number", 8) 
        .add("city", "London")) 
      .build()); 

    //Print the records 
    System.out.println(userRecords); 

    //Retrieve the address of the first user 
    System.out.println(userRecords.get(0).get("address")); 
+0

どのようなエラーが表示されますか?実際の結果は何ですか?代わりに何を期待しましたか? – Defozo

+0

私はメインコードでハードコードされたレコードのjsonコードを取得する必要がありますが、その場合は単に – user6939390

答えて

0

はあなたのエラー "によってjava.lang.StackOverflowError" となっていますか?

もしそうなら、toString()メソッドが原因です。あなたはそれがこの

public String toString() { 
     return super.toString(); 
    } 
} 

または他のいくつかの実装のようにする必要があり

public String toString() { 
     return this.toString(); 
    } 
} 

を書いています。 (少なくともthis.toString()を呼び出さないでください)

"this"はあなたのJsonObjectクラスを指し、this.toString()はこのメソッド自体です。

toString()メソッドでthis.toString()を呼び出すと、メソッド呼び出しが無限になります。

+0

プロジェクトを構築することができます。 'super.toString();'が返されます。 –

+1

私は "this.toString()をtoString()メソッドで呼び出すのが間違っている"と言っていただけです。たぶんここには他の実装が必要かもしれません。 –

+0

ありがとう!しかし、エラーは ゴールorg.codehaus.mojoを実行できませんでした:exec-maven-plugin:1.2.1:プロジェクトのexec(default-cli)Labo1:コマンドの実行に失敗しました。プロセスはエラーで終了しました:1(終了値:1) - > [ヘルプ1] – user6939390