Java 如何在Android中解析json对象?
我试图解析Json对象,它是Java 如何在Android中解析json对象?,java,android,json,parsing,Java,Android,Json,Parsing,我试图解析Json对象,它是 { "results":[ { "face":{ "id":361122.0, "photo_hash":"0a2aaff34fd576fc1caf711d88cbfd53", "x1":699, "x2":1020, "y1":271, "photo":" ",
{
"results":[
{
"face":{
"id":361122.0,
"photo_hash":"0a2aaff34fd576fc1caf711d88cbfd53",
"x1":699,
"x2":1020,
"y1":271,
"photo":" ",
"thumbnail":" ",
"meta":"",
"timestamp":"2016-07-28T08:50:43.710183",
"y2":592
},
"confidence":0.93187
},
{
"face":{
"id":361260.0,
"photo_hash":"767bf4df0c8a04361aaf5e6b74eb4d8c",
"x1":-25,
"x2":147,
"y1":10,
"photo":" ",
"thumbnail":" ",
"meta":"",
"timestamp":"2016-07-28T15:13:09.086390",
"y2":165
},
"confidence":0.926754
}
]
}
我使用这样的代码来解析置信度
和缩略图
:
resultParams[i].confidence = jsonObject.getJSONArray("results").getJSONObject(i).getString("confidence");
resultParams[i].thumbnail = jsonObject.getJSONArray("results").getJSONObject(i).getJSONObject("face").getString("thumbnail");
但是,它给出了异常“java.lang.NullPointerException:尝试写入空对象引用上的字段”
您能帮助我如何成功解析它吗?要给出答案: “java.lang.NullPointerException:尝试在空对象引用上写入字段”
意味着你的左边是问题所在<代码>结果图[i]很可能为空。要给出答案: “java.lang.NullPointerException:尝试在空对象引用上写入字段”
意味着你的左边是问题所在
resultParams[i]
很可能为空。如果您知道将接收什么类型的json对象(或者您可能有一个API),您可以通过例如Jackson library来创建此类对象。然后用它的getter访问“face”对象
yourObject.getResults().get(i).getFace().getThumbnail();
如果您知道将接收哪种类型的json对象(或者您可能有一个API),您可以通过例如Jackson library来创建此类的对象。然后用它的getter访问“face”对象
yourObject.getResults().get(i).getFace().getThumbnail();
首先,根据JSON响应创建模型对象。 您可以使用GSON将整个内容转换为对象。 这也可以通过使用其他库来实现 下面是JSON的模型对象
import java.util.Date;
import java.util.List;
class Result {
private List<PersonDetails> results;
// generate setter and getter
}
class PersonDetails
{
private ImageDetail face;
private Float confidence;
// generate setter and getter
}
class ImageDetail
{
private Long id;
private String photo_hash;
private Integer x1,x2,y1,y2;
private String thumbnail;
private String meta;
private String photo;
private Date timestamp;
// generate setter and getter
}
}
由于JSON响应中的日期格式不同,我们需要注册适配器来解析日期。
查看此链接以进行解析
类GsonUTCdateAdapter实现JsonSerializer、JsonDeserializer{
私人最终日期格式日期格式;
公共GsonUTCdateAdapter(){
dateFormat=new SimpleDataFormat(“yyyy-MM-dd'T'HH:MM:ss.SSS”,Locale.US);//这是我需要的格式
dateFormat.setTimeZone(TimeZone.getTimeZone(“UTC”);//这是将日期转换为UTC的关键行,默认序列化程序无法访问该日期
}
@重写公共同步JsonElement序列化(日期、类型、JsonSerializationContext JsonSerializationContext){
返回新的JsonPrimitive(dateFormat.format(date));
}
@重写公共同步日期反序列化(JsonElement JsonElement,类型类型,JSONESerializationContext JSONESerializationContext){
试一试{
return dateFormat.parse(jsonElement.getAsString());
}捕获(解析异常){
抛出新的JsonParseException(e);
}
}
}
现在运行main,您将获得JSON的对象表示。首先根据您创建的模型对象的JSON响应。 您可以使用GSON将整个内容转换为对象。 这也可以通过使用其他库来实现 下面是JSON的模型对象
import java.util.Date;
import java.util.List;
class Result {
private List<PersonDetails> results;
// generate setter and getter
}
class PersonDetails
{
private ImageDetail face;
private Float confidence;
// generate setter and getter
}
class ImageDetail
{
private Long id;
private String photo_hash;
private Integer x1,x2,y1,y2;
private String thumbnail;
private String meta;
private String photo;
private Date timestamp;
// generate setter and getter
}
}
由于JSON响应中的日期格式不同,我们需要注册适配器来解析日期。
查看此链接以进行解析
类GsonUTCdateAdapter实现JsonSerializer、JsonDeserializer{
私人最终日期格式日期格式;
公共GsonUTCdateAdapter(){
dateFormat=new SimpleDataFormat(“yyyy-MM-dd'T'HH:MM:ss.SSS”,Locale.US);//这是我需要的格式
dateFormat.setTimeZone(TimeZone.getTimeZone(“UTC”);//这是将日期转换为UTC的关键行,默认序列化程序无法访问该日期
}
@重写公共同步JsonElement序列化(日期、类型、JsonSerializationContext JsonSerializationContext){
返回新的JsonPrimitive(dateFormat.format(date));
}
@重写公共同步日期反序列化(JsonElement JsonElement,类型类型,JSONESerializationContext JSONESerializationContext){
试一试{
return dateFormat.parse(jsonElement.getAsString());
}捕获(解析异常){
抛出新的JsonParseException(e);
}
}
}
现在运行main,您将获得JSON的对象表示。请发布您的代码:)@HuyN我已经发布了!请查看问题您是否检查了
结果图[i]
是否不为空?确切地说,正如它所说的尝试写入字段
未读取,因此=
的左侧是问题更多的代码,这两行不能帮助我们解决问题。请发布您的代码:)@HuyN我已经发布了!请查看问题您是否检查了结果图[i]
是否不为空?确切地说,正如它所述,尝试写入字段
未读取,因此=
的左侧是问题更多的代码请注意,这两行不能帮助我们解决问题。