簡體   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