Java 如何在Android中解析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":" ",

我试图解析Json对象,它是

{
   "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]
是否不为空?确切地说,正如它所述,
尝试写入字段
未读取,因此
=
的左侧是问题更多的代码请注意,这两行不能帮助我们解决问题。