实现JSON库Java - ToString函数

时间:2016-10-07 22:08:18

标签: java json tostring

我正在进行实验室任务,第一部分我需要实现一个简单的JSON库,以便我可以用Java导出JSON数据。

现在我停留在JSONobject toString()函数上;

库应该可以将JSON模型导出为文本表示,以便它可以存储在文件中,或者使用HTTP进行传输,我需要使用toString方法

但是我已经收到错误,有人可以帮助我使用toString函数

这是我的JsonObject类:

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();
  }
}

&安培;主要方法

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"));

1 个答案:

答案 0 :(得分:0)

你的错误&#34; java.lang.StackOverflowError&#34;?

如果是这样,你的toString()方法就是原因。你正在写

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

应该是这样的

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

或其他一些实施。 (至少,不要调用this.toString())

因为&#34;这个&#34;这里指出你的JsonObject类,this.toString()就是这个方法本身。

因此在toString()方法中调用this.toString()会导致无限方法调用。