gson 使用java json的对象数组

3zwtqj6y  于 2022-11-06  发布在  Java
关注(0)|答案(1)|浏览(198)

我一直在尝试用java读取对象json的数组。
下面是我json文件:

  1. {
  2. "title": "The Social network",
  3. "summary": "On a fall night in 2003,Havard undergrad and \n programming genius Mark Zuckerberg sits down at his \n computer and heatedly begins working on a new idea.(...)",
  4. "year": 2010,
  5. "director": {
  6. "last_name": "fincher",
  7. "first_name": "David"
  8. },
  9. "actors": [{
  10. "first_name": "Jesse",
  11. "last_name": "Eisenberg"
  12. },
  13. {
  14. "first_name": "Roney",
  15. "last_name": "Mara"
  16. }
  17. ]
  18. }

我上了两堂课

  1. public class film {
  2. private String title;
  3. private String summary;
  4. private int year;
  5. private personne director;
  6. private personne[] actors;

和personne类,都使用getter和setter以及简单的tostring方法
这是我的主要内容

  1. public class FilmJsonReader {
  2. public static final String JSON_FILE="C:\\Users\\hp\\Desktop\\JSON project\\FILM.txt";
  3. public static void main(String[] args) throws IOException {
  4. InputStream fis = new FileInputStream(JSON_FILE);
  5. //create JsonReader object
  6. JsonReader jsonReader = Json.createReader(fis);
  7. //get JsonObject from JsonReader
  8. JsonObject jsonObject = jsonReader.readObject();
  9. //we can close IO resource and JsonReader now
  10. jsonReader.close();
  11. fis.close();
  12. //Retrieve data from JsonObject and create Employee bean
  13. film Film = new film();
  14. Film.setTitle(jsonObject.getString("title"));
  15. Film.setSummary(jsonObject.getString("summary"));
  16. Film.setYear(jsonObject.getInt("year"));
  17. //reading inner object from json object
  18. JsonObject innerJsonObject = jsonObject.getJsonObject("address");
  19. personne director = new personne();
  20. director.setFirst_name(innerJsonObject.getString("first_name"));
  21. director.setLast_name(innerJsonObject.getString("last_name"));
  22. Film.setDirector(director);
  23. //reading arrays from json
  24. JsonArray jsonArray = jsonObject.getJsonArray("actors");
  25. personne[] actors = new personne[jsonArray.size()];
  26. personne p = new personne();
  27. int i = 0;
  28. for(JsonValue value : jsonArray){
  29. actors[i++]=p.toString(value.toString());
  30. }
  31. Film.setActors(actors);
  32. //print employee bean information
  33. System.out.println(Film);
  34. }
  35. }

但输出如下:阅读数组中的对象时遇到问题

  1. --------------------------------------
  2. --------------------------------------
  3. title=The Social network<br />
  4. summary=On a fall night in 2003,Havard undergrad and (...)<br />
  5. year=2010<br />
  6. director=fincher, David<br />
  7. **actors= null null**<br />
  8. --------------------------------------
  9. --------------------------------------
laik7k3q

laik7k3q1#

for循环中,需要为JSON数组中的每个参与者创建一个新的personne对象,其方法与创建导演的方法完全相同,然后调用以下命令而不是Film.setDirector(director);actors[i++]=actor其中actor是您刚刚创建的人物。希望这对您有所帮助

相关问题