org.json.JSONObject котлин против java

#java #android #json #kotlin #org.json

#java #Android #json #котлин #org.json

Вопрос:

Я заметил разницу между тем, как JSONObject ведет себя в Kotlin и Java.

В Java:

 public class Animal {
    String name;
    int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {
        Animal anim = new Animal("Dog", 2);
        JSONObject obj = new JSONObject(new Gson().toJson(anim));
        System.out.println(obj);
    }
}
  

Нам нужно преобразовать в строку JSON, прежде чем создавать {"name":"Dog","age":2} из нее JSONObject. В противном случае мы получим пустой JSONObject {} .

В Kotlin:

 class Animal {
    val name: String = "Dog"
    val age: Int = 1
}

data class MadExample (
    val x: String,
    val y: String
)

fun main() {
    val mad = MadExample("mad", "example")
    println(JSONObject(mad))
    val animal = Animal()
    println(JSONObject(animal))
}
  

Нам не нужно преобразовывать его в строку JSON перед созданием JSONObject.

Итак, мой вопрос: что происходит за кулисами в обоих этих случаях? Почему JSONObject не поддерживает объекты непосредственно в Java?

Примечание: — Во всех приведенных выше примерах я использовал org.json.JSONObject

Заранее спасибо.

Комментарии:

1. Что произойдет, если вы добавите свойство getters ( String getName() ) в свой класс Java? Кроме того, пожалуйста, не забудьте указать, что JSONObject вы используете в каждом конкретном случае.

2. Когда добавляются средства получения свойств, я получаю JSONObject доступ непосредственно к объекту.

3. Для обоих языков поля должны быть видимыми в терминах геттеров, с которыми JSONObject будет работать, предоставляя JSONObject . Спасибо.