解析JSON和创建对象
问题描述:
在我的应用我已经解析这个JSON:解析JSON和创建对象
programs.json
{
"programs": {
"program": [
{
"programNumber": "1",
"imgURL": "http://www.photovideolife.com/userfiles/Placeholder%2001.jpg",
"description": "Lorem ipsum dolor sit er elit",
"episode": [
{
"pN": "1",
"episodeNumber": "1",
"transmissionName": "Titolo",
"date": "29 Giu 2013",
"time": "14:30",
"channel": "Real Time",
"channelLogo": "https://lh6.googleusercontent.com/-XSh-9ngYJu4/ThiY-xl2EeI/AAAAAAAABmc/iz04VpL5hOs/s800/realtime.png"
},
{
"pN": "1",
"episodeNumber": "1",
"transmissionName": "Titolo",
"date": "29 Giu 2013",
"time": "16:30",
"channel": "DMAX",
"channelLogo": "http://tv.zam.it/canali/dmax.png"
},
{
"pN": "1",
"episodeNumber": "2",
"transmissionName": "Titolo",
"date": "01 Lug 2013",
"time": "14:30",
"channel": "Real Time",
"channelLogo": "https://lh6.googleusercontent.com/-XSh-9ngYJu4/ThiY-xl2EeI/AAAAAAAABmc/iz04VpL5hOs/s800/realtime.png"
},
{
"pN": "1",
"episodeNumber": "2",
"transmissionName": "Titolo",
"date": "01 Lug 2013",
"time": "16:30",
"channel": "DMAX",
"channelLogo": "http://tv.zam.it/canali/dmax.png"
}
]
},
{
"programNumber": "2",
"imgURL": "http://mesa.umich.edu/files/mesa/field/image/placeholder2.png",
"description": "Lorem ipsum dolor sit er elit",
"Episode": [
{
"pN": "2",
"episodeNumber": "1",
"transmissionName": "Titolo 1",
"date": "30 Giu 2013",
"time": "13:30",
"channel": "Real Time",
"channelLogo": "https://lh6.googleusercontent.com/-XSh-9ngYJu4/ThiY-xl2EeI/AAAAAAAABmc/iz04VpL5hOs/s800/realtime.png"
},
{
"pN": "2",
"episodeNumber": "1",
"transmissionName": "Titolo 1",
"date": "30 Giu 2013",
"time": "18:30",
"channel": "DMAX",
"channelLogo": "http://tv.zam.it/canali/dmax.png"
},
{
"pN": "2",
"episodeNumber": "2",
"transmissionName": "Titolo 1",
"date": "01 Lug 2013",
"time": "13:30",
"channel": "Real Time",
"channelLogo": "https://lh6.googleusercontent.com/-XSh-9ngYJu4/ThiY-xl2EeI/AAAAAAAABmc/iz04VpL5hOs/s800/realtime.png"
},
{
"pN": "2",
"episodeNumber": "2",
"transmissionName": "Titolo 1",
"date": "01 Lug 2013",
"time": "18:30",
"channel": "DMAX",
"channelLogo": "http://tv.zam.it/canali/dmax.png"
}
]
},
{
"programNumber": "3",
"imgURL": "http://wp.contempographicdesign.com/wp_paramount/wp-content/themes/paramount/images/image_placeholder_lrg.jpg",
"description": "Lorem ipsum dolor sit er elit",
"Episode": [
{
"pN": "3",
"episodeNumber": "1",
"transmissionName": "Titolo 2",
"date": "30 Giu 2013",
"time": "10:30",
"channel": "Real Time",
"channelLogo": "https://lh6.googleusercontent.com/-XSh-9ngYJu4/ThiY-xl2EeI/AAAAAAAABmc/iz04VpL5hOs/s800/realtime.png"
},
{
"pN": "3",
"episodeNumber": "1",
"transmissionName": "Titolo 2",
"date": "30 Giu 2013",
"time": "17:30",
"channel": "DMAX",
"channelLogo": "http://tv.zam.it/canali/dmax.png"
},
{
"pN": "3",
"episodeNumber": "2",
"transmissionName": "Titolo 2",
"date": "01 Lug 2013",
"time": "10:30",
"channel": "Real Time",
"channelLogo": "https://lh6.googleusercontent.com/-XSh-9ngYJu4/ThiY-xl2EeI/AAAAAAAABmc/iz04VpL5hOs/s800/realtime.png"
},
{
"pN": "3",
"episodeNumber": "2",
"transmissionName": "Titolo 2",
"date": "01 Lug 2013",
"time": "17:30",
"channel": "DMAX",
"channelLogo": "http://tv.zam.it/canali/dmax.png"
}
]
}
]
}
}
我想创造一些对象,从这个JSON文件存储数据,所以我使用Gson库来使这个解析非常简单。我无法使用此库中创建对象,我创建了4个对象:
- EpisodeData我在其中存储该信息(PN,episodeNumber,日期,时间,渠道和channelLogo)
- 情节这是一个EpisodeData
- 计划的阵列它的情节数组
- 程序中,我存储阵列计划
这里是对象的代码:
EpisodeData.java
public class EpisodeData implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public String pN, episodeNumber, transmissionName, date, time, channel, channelLogo;
}
Episode.java
public class Episode implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public EpisodeData[] episodeData;
}
Program.java
public class Program implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public Episode[] episode;
}
Programs.java
public class Programs implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public Program program;
}
所以,我提出(与AsyncHttpClient)连接到从服务器上下载的JSON文件,我开始分析它,但我有麻烦了。我张贴在这里的代码片段:
public void onSuccess(String json) {
super.onSuccess(json);
Gson decoder = new Gson();
Programs programs = decoder.fromJson(json, Programs.class);
Log.d("PROGRAMS", "" + programs.program);
}
为什么我不能访问到情节和EpisodeData?为什么当我尝试登录programs.program
时,它返回null?
我希望你能帮助我找到这个问题 的解决方案谢谢
答
问题出在基础对象上。它不应该是程序,而应该是具有“程序”属性的另一个对象。除此之外,Programs对象还有一个Program作为属性的数组,而不是一个实例。
基础对象:
public class JsonRootObject {
public Programs programs;
}
程序对象:
public class Programs implements Serializable {
private static final long serialVersionUID = 1L;
public Program []program;
}
程序对象:
public class Program implements Serializable {
private static final long serialVersionUID = 1L;
public Episode[] episode;
}
情节对象:
public class Episode implements Serializable {
private static final long serialVersionUID = 1L;
public String pN, episodeNumber, transmissionName, date, time, channel, channelLogo;
@Override
public String toString() {
return "Episode [pN=" + pN + ", episodeNumber=" + episodeNumber
+ ", transmissionName=" + transmissionName + ", date="
+ date + ", time=" + time + ", channel=" + channel
+ ", channelLogo=" + channelLogo + "]";
}
}
EpisodeData不是必需的,因为Episode是最后一级。
最后,你可以用它解析:
Gson decoder = new Gson();
JsonRootObject programs = decoder.fromJson(json, JsonRootObject.class);
我添加了一个toString方法,以集类来测试解析器,这是结果:
System.out.println(programs.programs.program[0].episode[0]);
08-06 05:31:58.236: I/System.out(1249): Episode [pN=1, episodeNumber=1, transmissionName=Titolo, date=29 Giu 2013, time=14:30, channel=Real Time, channelLogo=https://lh6.googleusercontent.com/-XSh-9ngYJu4/ThiY-xl2EeI/AAAAAAAABmc/iz04VpL5hOs/s800/realtime.png]
希望帮助:)
+0
它的工作原理!非常感谢你! – lucgian84
您没有为获取数据创建问题类。检查[此演示](https://github.com/lalit3686/GSONDemo) –
你说它的代码不起作用...我试图在我的星系S2,它显示我一个白色的活动 – lucgian84
情节应该尽可能多属性就像你想要解析的一样,按照它们进入json的方式命名。当他们以“ - ”开头时,既不能重命名类,也不能解析它们,因为它们的名称与Gson期望的不同。尝试在调用decoder.fromJson之前尝试使用pN替换-pN,使用episodeNumber替换-episodeNumber等,然后再调用decoder.fromJson,如下所示:json.replaceAll(“ - pN”,“pN”);等等 –