JSON解析使用Gson没有给出正确的值

时间:2017-10-16 10:35:57

标签: java json gson

您好我尝试解析JSON,如:

{"error":{"code":20,"message":"Transaction not found."}}

使用的代码是:

GulfBoxError errordetails= new Gson().fromJson(json, GulfBoxError.class);
                System.out.println("RESULT   :"+errordetails.getCode()+"   "+errordetails.getMessage());

班级档案是:

public class GulfBoxError {
public int code;
public String message;

public int getCode() {
    return code;
}
public String getMessage() {
    return message;
}
}

每次我尝试,我都没有在这里得到他的价值:

RESULT   :0   null

任何想法为什么?我在这里缺少什么

3 个答案:

答案 0 :(得分:0)

  • 如果你没有封装字段,你就不需要吸气剂。
  • 您的对象是mailformed。顶级应该只包含一个字段:error

代码应如下所示:

public class GufError{
    public GulfBoxError error;
}

public class GulfBoxError {
    public int code;
    public String message;

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}
GufError errordetails= new Gson().fromJson(json, GufError.class);

答案 1 :(得分:0)

你可以试试这个,如果你不想创建一个单独的类作为包装器:

Gson gson = new Gson();
JsonObject jsonObj = gson.fromJson(json,JsonObject.class);
GulfBoxError errordetails= gson.fromJson(jsonObj.get("error"), GulfBoxError.class);
System.out.println("RESULT   :"+errordetails.getCode()+"   "+errordetails.getMessage());

答案 2 :(得分:0)

您的GulfBoxError类并不正确。

你需要这样的东西:

 public class GulfError{
    public GulfBoxError error;
}

 class GulfBoxError {
    public int code;
    public String message;

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}

并以这种方式解析:

    Gson gson = new Gson();
    String filename="/...Pathtoyour/json.json";
    JsonReader reader = new JsonReader(new FileReader(filename));
    GulfError errordetails= gson.fromJson(reader, GulfError.class);
    System.out.print("errordetails: " + gson.toJson(errordetails));

无论如何,如果你想使用GulfBoxError类,你可以这样做:

      Type listType = new TypeToken<Map<String, GulfBoxError>>(){}.getType();
      Map<String, GulfBoxError> mapGulfBoxError= gson.fromJson(reader,listType);
      for (Map.Entry<String, GulfBoxError> entry : mapGulfBoxError.entrySet())
      {
          System.out.println("Key: " + entry.getKey() + "\nValue:" + gson.toJson(entry.getValue()));

      }

如果您不想创建代表您的Json的对象,有时这可能很有用。