Java: наследование JSONObject - PullRequest
       3

Java: наследование JSONObject

1 голос
/ 16 декабря 2011

У меня проблемы с преобразованием объектов в JSONObject (org.json.JSONObject) в Java.

У меня есть объект X, который является дочерним объектом Y. Когда я создаю «новый JSONObject (this) .ToString ()», только атрибуты объекта X (дочернего), которые создаются в JSONObject.

См. Пример ниже:

Родительский класс:

import org.json.JSONObject; 

public class Class1 {
private String name;
private int number;

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getNumber() {
    return number;
}
public void setNumber(int number) {
    this.number = number;
}
public String toString(){
    return new JSONObject(this).toString(); 
}
}

Детский класс:

import org.json.JSONObject;
public class Class2 extends Class1 {

private String attrChildString;
private int attrChildInt;
/**
 * @param args
 */
public static void main(String[] args) {
    Class2 class2 = new Class2();
    class2.setName("test");
    class2.setNumber(5);
    class2.setAttrChildInt(10);
    class2.setAttrChildString("child");

    System.out.println("toString child : " + class2.toString());
    System.out.println("toString Parent : " + class2.toStringParent());
}
public String getAttrChildString() {
    return attrChildString;
}
public void setAttrChildString(String attrChildString) {
    this.attrChildString = attrChildString;
}
public int getAttrChildInt() {
    return attrChildInt;
}
public void setAttrChildInt(int attrChildInt) {
    this.attrChildInt = attrChildInt;
}

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

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

Результат: toString child: {"attrChildInt": 10, "attrChildString": "child"} toString Parent: {"attrChildInt": 10, "attrChildString": "child"}

Но мне нужно отобразить значения родителя. Пример: {"attrChildInt": 10, "attrChildString": "child", "name": "test", "number": "5"}

Есть идеи?

Спасибо.

Ответы [ 3 ]

1 голос
/ 16 декабря 2011

По-видимому, оно принимает поле, определенное в объекте, а не в суперклассах.Просто возьмите другой инструмент для создания базы данных (их множество - например, GSON, xstream., Моя собственная база данных: https://github.com/ko5tik/jsonserializer)

0 голосов
/ 24 февраля 2018

Это должно было быть правдой во время задания этого вопроса, однако, они, по-видимому, исправили эту ошибку в более поздних версиях.Я использовал json 20180130, и он работал нормально.

0 голосов
/ 16 декабря 2011

Забавно, просто скопировал ваш код в мой Eclipse, добавил исходные тексты из http://json.org/java в проект, выполнил и вот что я получаю:

toString child : {"attrChildInt":10,"name":"test","number":5,"attrChildString":"child"}
toString Parent : {"attrChildInt":10,"name":"test","number":5,"attrChildString":"child"}

Я на Java 6 и использовал эта реализация JSONObject

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...