解析 Java 中的嵌套 JSON 对象

huangapple go评论72阅读模式
英文:

Parsing JSON Object within an Object java

问题

I'm here to provide the translation you requested. Here's the translated code part:

正在尝试使用 `volley` 映射这个 JSON。但每次在我的构造函数内都会出现错误。

[
    {
        "id": 19,
        "time_created": {
            "date": "2018-09-18 09:24:34.000000",
            "timezone_type": 3,
            "timezone": "America/Chicago"
        }
    }
]

所以我需要提取 `time_created` 对象。这是我的模型类;
public class NeighbourhoodOther implements Serializable {

    public int id;
    public TimeCreated timeCreated;

    public NeighbourhoodOther() {

    }

    public NeighbourhoodOther(int id, TimeCreated timeCreated ) {
        this.id = id;
        this.timeCreated = timeCreated;
    }

    public TimeCreated getTimeCreated() {
        return timeCreated;
    }

    public void setTimeCreated(TimeCreated timeCreated) {
        this.timeCreated = timeCreated;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public static class TimeCreated {
        public String timezone;
        public int timezoneType;
        public String date;

        public String getTimezone() {
            return timezone;
        }

        public void setTimezone(String timezone) {
            this.timezone = timezone;
        }

        public int getTimezoneType() {
            return timezoneType;
        }

        public void setTimezoneType(int timezoneType) {
            this.timezoneType = timezoneType;
        }

        public String getDate() {
            return date;
        }

        public void setDate(String date) {
            this.date = date;
        }
    }

}

这是我尝试使用 Volley 提取的方式,但每次都出错。

for (int i = 0; i < neighOther.length(); i++) {

    JSONObject neighOtherObject = neighOther.getJSONObject(i);
    int id = neighOtherObject.getInt("id");

    NeighbourhoodOther.TimeCreated timeCreated = neighOtherObject.getJSONObject("time_created");

    NeighbourhoodOther neighbourhoodOther = new NeighbourhoodOther(id, timeCreated);
    otherNeighbourHoodList.add(neighbourhoodOther);
}
构造函数内的错误说它期望一个 JSONObject 而不是 `TimeCreated`。最佳的数据提取方法是什么?我需要将 `date` 字符串传递给 `TextView`。

Please note that this translation is for your reference, and it's important to ensure that the code logic and structure are still correct in the context of your application.

英文:

Am trying to map this json with volley. But I keep getting an error inside my constructor each time.

[
{
"id": 19,
"time_created": {
"date": "2018-09-18 09:24:34.000000",
"timezone_type": 3,
"timezone": "America/Chicago"
},
]

So I need to fetch the time_created object. This is my model class;
public class NeighbourhoodOther implements Serializable{

    public int id;
public TimeCreated timeCreated;
public NeighbourhoodOther(){
}
public NeighbourhoodOther(int id, TimeCreated timeCreated ) {
this.id = id;
this.timeCreated= time_created;
}
public TimeCreated getTimeCreated() {
return timeCreated;
}
public void setTimeCreated(TimeCreated timeCreated) {
this.timeCreated = timeCreated;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public static class TimeCreated {
public String timezone;
public int timezoneType;
public String date;
public String getTimezone() {
return timezone;
}
public void setTimezone(String timezone) {
this.timezone = timezone;
}
public int getTimezoneType() {
return timezoneType;
}
public void setTimezoneType(int timezoneType) {
this.timezoneType = timezoneType;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
}

This is the way am trying to fetch with volley but I get an error each time.

  for (int i = 0; i < neighOther.length(); i++) {
JSONObject neighOtherObject = neighOther.getJSONObject(i);
int id = neighOtherObject.getInt("id");
NeighbourhoodOther.TimeCreated timeCreated = neighOtherObject.getJSONObject("time_created");
NeighbourhoodOther neighbourhoodOther = new NeighbourhoodOther(id, time_created);
otherNeighbourHoodList.add(neighbourhoodOther);
}

The error inside my constructor says its expecting a JSONObject instead of TimeCreated. Whats the best way to fetch the data. I need to pass the date String to a TextView.

答案1

得分: 0

NeighbourhoodOther.TimeCreated timeCreated = neighOtherObject.getJSONObject("time_created") 返回一个 JSONObject 而不是 NeighbourhoodOther.TimeCreated

尝试:

JSONObject obj = neighOtherObject.getJSONObject("time_created");
NeighbourhoodOther.TimeCreated temp = new NeighbourhoodOther.TimeCreated()
temp.timezone = obj.getString("timezone");
... 填充 NeighbourhoodOther.TimeCreated 的成员
英文:

NeighbourhoodOther.TimeCreated timeCreated = neighOtherObject.getJSONObject("time_created") returns a JSONObject not NeighbourhoodOther.TimeCreated

try:

JSONObject obj = neighOtherObject.getJSONObject("time_created");
NeighbourhoodOther.TimeCreated temp = new NeighbourhoodOther.TimeCreated()
temp.timezone = obj.getString("timezone");
... fill in NeighbourhoodOther.TimeCreated members

答案2

得分: 0

getJSONObject返回一个 JSONObject,因此您应该将其转换为自定义类型。
有许多库可以做到这一点,Gson 是其中之一。

import com.google.gson.Gson;

// 其他代码

Gson gson = new Gson();

TimeCreated obj = gson.fromJson(neighOtherObject.getJSONObject("time_created").toString(), TimeCreated.class);
英文:

getJSONObject return a jsonobject, so you should cast it to custom type.
There are lots of libray to do this, Gson is the one.

    import com.google.gson.Gson; 
//other stuffs
Gson gson= new Gson();
TimeCreated obj = gson.fromJson(neighOtherObject.getJSONObject("time_created").toString(), TimeCreated.class);

huangapple
  • 本文由 发表于 2020年8月12日 08:48:02
  • 转载请务必保留本文链接:https://go.coder-hub.com/63368213.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定