繁体   English   中英

如何在Android中解析json对象?

[英]How to parse json object in Android?

我试图解析的是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
      }
   ]
}

我正在使用这样的代码来解析confidencethumbnail

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: Attempt to write to field on a null object reference"

您能帮我成功解析吗?

给这个答案:

“ java.lang.NullPointerException:尝试在空对象引用上 写入字段

意味着您的左侧是问题。 resultParams[i]最有可能为null。

如果您知道将接收哪种json对象(或者可能有API),则可以通过例如Jackson库来制作此类的对象。 然后使用其吸气剂访问“面部”对象。

yourObject.getResults().get(i).getFace().getThumbnail();

首先,基于JSON响应,创建模型对象。 您可以利用GSON将整个内容转换为对象。 也可以使用其他库来实现。

这是JSON的Model对象

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
}

现在使用GSON转换您的JSON。

public class JsonTransaformer1 {

@SuppressWarnings("unchecked")
public static void main(String[] args) {
    String text = "Place your JSON Response as input that you posted";
    Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new GsonUTCdateAdapter()).create();
    Result obj = gson.fromJson(text, Result.class);
    System.out.println(obj.getResults().size());
    System.out.println(obj.getResults().get(0).getFace().getId());
    System.out.println(obj.getResults().get(0).getConfidence());
}

}

由于JSON响应中存在的日期格式不同,因此我们需要注册适配器以解析日期。 查看此链接进行解析

使用gson将Java Date转换为UTC

class GsonUTCdateAdapter implements JsonSerializer<Date>,JsonDeserializer<Date> {

private final DateFormat dateFormat;

public GsonUTCdateAdapter() {
  dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);      //This is the format I need
  dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));                               //This is the key line which converts the date to UTC which cannot be accessed with the default serializer
}

@Override public synchronized JsonElement serialize(Date date,Type type,JsonSerializationContext jsonSerializationContext) {
    return new JsonPrimitive(dateFormat.format(date));
}

@Override public synchronized Date deserialize(JsonElement jsonElement,Type type,JsonDeserializationContext jsonDeserializationContext) {
  try {
    return dateFormat.parse(jsonElement.getAsString());
  } catch (ParseException e) {
    throw new JsonParseException(e);
  }
}
}

现在运行main,您将获得JSON的Object表示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM