【问题标题】:The method toJson(...) is undefined for the type Gson对于 Gson 类型,方法 toJson(...) 未定义
【发布时间】:2018-09-12 00:08:45
【问题描述】:

我正在尝试为我的项目使用 GSON 库将 Java 嵌套对象序列化为 Json 格式。我已经下载了 gson-2.8.2.jar 并建立了一个路径。

  • 我还需要做什么才能让这个 jar 正常工作吗? 我听说有人提到 Maven,但我对它一点也不熟悉,而且对于我的编程技能水平来说,它似乎相当复杂。

  • 我收到“对于 Gson 类型的 toJson(ParentObject) 方法未定义”错误。我已经阅读了大量关于泛型/非泛型类型的信息,但仍然很难理解。我试图调用“.toJson(Object src, Type typeOfSrc)”,但我无法正确输入类型。我应该使用这种方法吗?我应该在“类型”中写什么?

  • 我的阵列似乎也有问题。我试图打印它,但不断收到“线程“主”java.lang.NullPointerException 中的异常”错误。有人知道为什么会这样吗?

这是我的主要 java 类:

package Gson_package;
import com.google.gson.*;

public class Gson {
public static void main(String args[]) {
ParentObject obj1 = new ParentObject();
serializeJson(obj1);
}

public static String serializeJson(ParentObject obj1) {     
Gson gson = new Gson();
String json = gson.toJson(obj1);
return json;
}}

这是我的父类,它创建一个数组,另一个嵌套类创建具有两个属性的对象:

package Gson_package;

public class ParentObject {
public Property [] myArray; //1 attribute - An array of "Property" Objects

public ParentObject() //Default constructor {
for(int i = 0;i<9;i++){
myArray[i] = new Property("", "");
}
myArray[0].setPropertyValue("firstname", "HubSpot");
myArray[1].setPropertyValue("lastname", "Test");
myArray[2].setPropertyValue("website", "http://hubspot.com");
myArray[3].setPropertyValue("company", "HubSpot");
myArray[4].setPropertyValue("phone", "555-122-2323");
myArray[5].setPropertyValue("address", "25 First Street");
myArray[6].setPropertyValue("city", "HCambridge");
myArray[7].setPropertyValue("state", "MA");
myArray[8].setPropertyValue("zip", "02139");
}

public static class Property //Properties object {
public String property;//attributes
public String value;

//General Constructor
public Property(String property, String value){
this.property = property;
this.value = value;
}
//getter method
public String getPropertyValue() {
return this.property+" : "+this.value;
}
//setter method
public void setPropertyValue(String property, String value) {
this.property = property;
this.value = value;
}}}

我正在使用这个 JSON 文件,我试图将它放入 Java 对象中:

{ “特性”: [ { “财产”:“名字”, “价值”:“HubSpot” }, { “属性”:“姓氏”, “价值”:“测试” }, { “属性”:“网站”, “价值”:“http://hubspot.com” }, { “房地产公司”, “价值”:“HubSpot” }, { “财产”:“电话”, “价值”:“555-122-2323” }, { “财产”:“地址”, “价值”:“第一街 25 号” }, { “财产”:“城市”, “价值”:“剑桥” }, { “属性”:“状态”, “价值”:“MA” }, { “属性”:“拉链”, “价值”:“02139” } ] }

编辑

我已将我的类重命名为 MyGsonTest,导入 com.google.gson.Gson 而不是 com.google.gson.*,并修复了我的数组初始化。但是,'.toJson' 方法仍然不起作用。 这是我用作示例的教程,我遇到问题的方法似乎在那里工作得很好:https://www.youtube.com/watch?v=ou2yFJ-NWr8&index=2&list=PLpUMhvC6l7AOy4UEORSutzFus98n-Es_l

【问题讨论】:

  • public static String serializeJson(ParentObject obj1) { Gson gson = new Gson(); String json = gson.toJson(obj1); } 此代码无法编译,因为它需要返回 String
  • 你是对的!谢谢!我在代码中添加了 return 语句。
  • 抱歉,但当您编辑问题时,不要只是在最后添加更多信息。真的返工这个问题。如果您将您的课程从 Gson 重命名为 MyGsonTest,那么请:更新相应的源代码。您希望确保有人可以查看问题内容,​​并快速了解您的问题。在这里,人们必须研究所有的 cmets、所有的答案以及那里的 cmets,但您仍然会混淆您的问题到底是什么。

标签: java json serialization jar gson


【解决方案1】:

无论您从 GSON jar 导入什么,都可能被您自己的名为 Gson 的类覆盖

public class Gson {

gson.toJson(obj1);不存在的原因是你没有写任何这样的方法。

您要使用的课程是com.google.gson.Gson,所以我建议您开始将您自己的手工制作的课程重命名为其他名称,例如MyGSonTest

根据Apache Maven Apache Maven 是一个软件项目管理和理解工具。

编辑

另外关于你的数组问题,你需要声明数组的大小

Property [] myArray = new Property[10];

【讨论】:

  • 感谢您的回复。我更改了类名并修复了我的数组初始化。我还导入了 com.google.gson.Gson 。关于'toJson'方法,它不是Gson库的内置方法吗? [链接] (google.github.io/gson/apidocs/com/google/gson/Gson.html)
  • 是的,它似乎是com.google.gson.Gson 的一种方法,但在您的代码中,Gson 指的是您自己的代码。如果您仍然无法工作,请编辑您的问题,并附上您尝试过的内容
  • 追加你尝试过的内容 - 你已经完全改变了你的问题,因此我的回答看起来无关紧要。 PLUS你发布的代码甚至不会编译
【解决方案2】:

好的,所以我有三个问题。我已经弄清楚我做错了什么。

问题 1. Gson jar 工作正常。正如Scary Wombat 所指出的那样,除了在您的项目中构建通向它的路径并导入 com.google.gson.Gson 库之外,不需要其他任何东西来工作。

问题 2。 我一直使用 toJson 方法遇到的错误是因为该方法未正确调用。当它被这样调用时,它按预期工作:

String json = new Gson().toJson(obj1);

问题 3。 最初我有一个对象数组。我必须将其更改为 ArrayList,因此我可以向其中添加对象,而不必声明一个固定大小的数组。

我也不得不改变我的课程。我将在下面发布正确的代码。此代码创建 Java 类,然后用于以 JSON 格式保存您在这些类中创建的数据。

希望这有助于万一有人遇到同样的问题。

主类:

package myGsonTestPackage;
import com.google.gson.Gson;

public class MyGsonTest {
public static void main(String args[]) {        
serialize();        
}   
private static void serialize() {
ParentObject obj1 = new ParentObject();
//initialize 9 Property Objects as per Json file we're working with 
Property p1 = new Property();
Property p2 = new Property();
Property p3 = new Property();
Property p4 = new Property();
Property p5 = new Property();
Property p6 = new Property();
Property p7 = new Property();
Property p8 = new Property();
Property p9 = new Property();

//set property and value for each Property Object we've initialized
p1.setPropertyValue("firstname", "HubSpot");
p2.setPropertyValue("lastname", "Test");
p3.setPropertyValue("website", "http://hubspot.com");
p4.setPropertyValue("company", "HubSpot");
p5.setPropertyValue("phone", "555-122-2323");
p6.setPropertyValue("address", "25 First Street");
p7.setPropertyValue("city", "HCambridge");
p8.setPropertyValue("state", "MA");
p9.setPropertyValue("zip", "02139");

//Populate the ArrayList
obj1.properties.add(p1);
obj1.properties.add(p2);
obj1.properties.add(p3);
obj1.properties.add(p4);
obj1.properties.add(p5);
obj1.properties.add(p6);
obj1.properties.add(p7);
obj1.properties.add(p8);
obj1.properties.add(p9);
//create Json representation of the data
String json = new Gson().toJson(obj1);
//Print the data
System.out.println(json);
}}

父对象类:

package myGsonTestPackage;
import java.util.ArrayList;
public class ParentObject {
public ArrayList<Property> properties = new ArrayList<>(); }

属性类:

package myGsonTestPackage;
public class Property {
public String property;//attributes
public String value;

//getter method
public String getPropertyValue() {
return this.property+" : "+this.value;
}
//setter method
public void setPropertyValue(String property, String value) {
this.property = property;
this.value = value;
}}

【讨论】:

  • Gson gson = new Gson(); String json = gson.toJson(obj1);String json = new Gson().toJson(obj1); 相同 - 您的回答不会添加我的帖子未回答的任何内容。我真的希望你能像 StackOverflow 一样接受我的回答。
  • 问题是当我写这个的时候: Gson gson = new Gson();字符串 json = gson.toJson(obj1);我得到一个编译错误。因此,在这种特殊情况下似乎不一样。我确实接受了您的建议并更改了可能与我的代码中的其他内容冲突的名称,但它并没有解决我遇到的问题。我发布了完整的代码,因为我还有其他问题,并且对我的代码进行了相当多的更改。如果您觉得您的帮助没有得到赞赏,我很抱歉。这不是我的本意。
猜你喜欢
  • 1970-01-01
  • 2015-08-21
  • 2013-11-11
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多