2016-08-03 114 views
0

我想解析Json对象;如何解析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"

能否请你帮我如何成功地解析呢?

+0

请发布您的代码:) – alway5dotcom

+0

@HuyN我已经发布!请参阅问题 – goGud

+2

您是否检查过'resultParams [i]'不为null? – Fildor

回答

2

为了给这个答案:

“显示java.lang.NullPointerException:尝试写上一个空对象引用现场

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

0

如果你知道你会收到什么类型的json对象(或者你有一个API),你可以通过例如Jackson库来创建这个类的对象。然后用getter访问“face”对象。

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

首先基于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 
} 

现在使用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的反应是不同的,我们需要注册的适配器来解析日期。 。看看这个链接,解析

Java Date to UTC using gson

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); 
    } 
} 
} 

现在运行主你会得到JSON的对象表示。