对于Gson类型,方法toJson(...)未定义

问题描述 投票:-1回答:2

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

  • 还有什么我必须做的才能让这个罐子正常工作吗?我听说有人提到Maven,但我根本不熟悉它,对我的编程技巧水平来说似乎相当复杂。
  • 我得到一个“方法toJson(ParentObject)未定义类型Gson”错误。我已经阅读了关于泛型/非泛型类型的大量信息,但仍然很难理解。我试着调用“.toJson(Object src,Type typeOfSrc)”,但是我无法获得Type。我应该使用这种方法,我应该在“类型”中写什么?
  • 我的阵列似乎也有问题。我试图打印它,但继续得到“线程中的异常”主“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 Objects:

{“properties”:[{“property”:“firstname”,“value”:“HubSpot”},{“property”:“lastname”,“value”:“Test”},{“property”:“website” ,“value”:“http:// hubspot.com”},{“property”:“company”,“value”:“HubSpot”},{“property”:“phone”,“value”:“555- 122-2323“},{”property“:”address“,”value“:”25 First Street“},{”property“:”city“,”value“:”Cambridge“},{”property“:” state“,”value“:”MA“},{”property“:”zip“,”value“:”02139“}]}

编辑

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

java json serialization jar gson
2个回答
1
投票

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

public class Gson {

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

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

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

编辑

另外,关于Array问题,您需要声明具有大小的Array

Property [] myArray = new Property[10];

-1
投票

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

问题1. Gson jar工作正常。除了在项目中构建路径并导入com.google.gson.Gson库时,除了Scary Wombat指出之外,没有什么需要它可以工作。

问题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);
}}

ParentObject类:

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;
}}
© www.soinside.com 2019 - 2024. All rights reserved.