Метод toJson (...) не определен для типа Gson - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь сериализовать вложенный объект Java в формат Json, используя библиотеку GSON для моего проекта. Я скачал gson-2.8.2.jar и создал путь.

  • Есть ли что-то еще, что я должен сделать, чтобы эта банка работала правильно? Я слышал, что люди упоминают Maven, но я совсем не знаком с ним, и это кажется довольно сложным для моего уровня навыков программирования.

  • Я получаю сообщение " Метод toJson (ParentObject) не определен для типа Gson " ошибка. Я прочитал тонну информации о родовых / неуниверсальных типах, но это все еще трудно понять. Я пытался вызвать " .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" }, { "свойство": "фамилия", "value": "Test" }, { "свойство": "сайт", "значение": "http: // hubspot.com" }, { "собственность": "компания", "значение": "HubSpot" }, { "собственность": "телефон", «значение»: «555-122-2323» }, { "свойство": "адрес", "значение": "25 Первая улица" }, { "собственность": "город", "значение": "Кембридж" }, { "собственность": "государство", "значение": "МА" }, { "свойство": "почтовый индекс", "значение": "02139" } ] }

редактировать

Я переименовал свой класс в MyGsonTest, импортировал com.google.gson.Gson вместо com.google.gson. * И исправил инициализацию массива. Однако метод .toJson по-прежнему не работает. Это учебное пособие, которое я использовал в качестве примера, и метод, с которым у меня возникли проблемы, кажется, отлично работает там: https://www.youtube.com/watch?v=ou2yFJ-NWr8&index=2&list=PLpUMhvC6l7AOy4UEORSutzFus98n-Es_l

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Хорошо, у меня было три вопроса. Я понял, что я делаю неправильно.

Вопрос 1. Gson jar работает нормально. Больше ничего не требуется для его работы, кроме создания пути к нему в вашем проекте и импорта библиотеки com.google.gson.Gson, как указано Scary Wombat .

Вопрос 2. Ошибка, которую я продолжал получать с помощью метода toJson, заключалась в том, что метод был вызван неправильно. Он работает, как и ожидалось, когда он называется так:

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

Вопрос 3. Изначально у меня был массив объектов. Мне пришлось изменить его на ArrayList, чтобы я мог добавить к нему Objects вместо того, чтобы объявлять массив фиксированного размера.

Мне тоже пришлось поменять классы. Я отправлю правильный код ниже. Этот код создает классы 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 Class:

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;
}}
0 голосов
/ 12 сентября 2018

Все, что вы импортируете из банки GSON, вероятно, будет перезаписано вашим собственным классом Gson

public class Gson {

Причина, по которой gson.toJson(obj1); не существует, заключается в том, что вы не написали ни одного такого метода.

Класс, который вы хотите использовать, - com.google.gson.Gson, поэтому я предлагаю для начала переименовать собственный класс, созданный вручную, во что-то другое, например, MyGSonTest

Согласно Apache Maven Apache Maven - это инструмент управления и понимания программных проектов.

edit

Также в отношении вашей проблемы с массивом вам необходимообъявить массив размером

Property [] myArray = new Property[10];
...