Java 将迭代器从JSONObject重写为JSONArray

Java 将迭代器从JSONObject重写为JSONArray,java,json,Java,Json,我有一个用于JSONObjects的迭代器,但不幸的是,我从JSON数据中得到了一个JSONArray 现在我想重写它。我对Java相当陌生。谁能告诉我怎么做 我使用json.simple库 public class JSONIteratorAuthor implements Iterator <Author> { private Iterator<JSONObject> authors; public JSONIteratorAuthor(JSONObj

我有一个用于
JSONObjects
的迭代器,但不幸的是,我从JSON数据中得到了一个
JSONArray

现在我想重写它。我对Java相当陌生。谁能告诉我怎么做

我使用json.simple库

public class JSONIteratorAuthor implements Iterator <Author> {

   private Iterator<JSONObject> authors;

   public JSONIteratorAuthor(JSONObject jsonObject){

       this.authors = ((JSONArray) jsonObject.get("authors")).iterator();
   }

   @Override
   public boolean hasNext() {
       return this.authors.hasNext();
   }

   public Author next() {
       if(this.hasNext()){
           Author a = new Author(0, "", "");
           JSONObject authorNode = (JSONObject) authors.next();
           a.setFirstName((String) authorNode.get("first_name"));
           a.setLastName((String) authorNode.get("last_name"));
           return a;
       }
       else {
       return null;
       }
   }    
}
公共类jsoniratorauther实现迭代器{
私有迭代器作者;
公共JSONIteratorAuthor(JSONObject JSONObject){
this.authors=((JSONArray)jsonObject.get(“authors”).iterator();
}
@凌驾
公共布尔hasNext(){
返回this.authors.hasNext();
}
公共作者next(){
if(this.hasNext()){
作者a=新作者(0,“,”);
JSONObject authorNode=(JSONObject)authors.next();
a、 setFirstName((字符串)authorNode.get(“first_name”);
a、 setLastName((字符串)authorNode.get(“姓氏”);
返回a;
}
否则{
返回null;
}
}    
}

由于缺少关于JSON数据结构的信息,我假设如下:

  • 您有一个
    JSONArray
    对象来调用构造函数
  • JSONArray
    包含
    JSONObject
    s
  • 这些
    JSONObject
    s具有合适的键值对
  • 在这种情况下,以下解决方案应该有效。它利用了
    JSONArray
    本身是可迭代的这一事实

    private Iterator<JSONObject> authors;
    
    @SuppressWarnings("unchecked")
    public JSONIteratorAuthor(JSONArray array){
       authors = array.iterator();
    }
    
    @Override
    public boolean hasNext() {
       return authors.hasNext();
    }
    
    @Override
    public Author next() {
       if (hasNext()) {
           Author a = new Author(0, "", "");
           JSONObject authorNode = authors.next();
           a.setFirstName((String) authorNode.get("first_name"));
           a.setLastName((String) authorNode.get("last_name"));
           return a;
       }
       else {
           return null;
       }
    }
    

    由于缺少关于JSON数据结构的信息,我假设:

  • 您有一个
    JSONArray
    对象来调用构造函数
  • JSONArray
    包含
    JSONObject
    s
  • 这些
    JSONObject
    s具有合适的键值对
  • 在这种情况下,以下解决方案应该有效。它利用了
    JSONArray
    本身是可迭代的这一事实

    private Iterator<JSONObject> authors;
    
    @SuppressWarnings("unchecked")
    public JSONIteratorAuthor(JSONArray array){
       authors = array.iterator();
    }
    
    @Override
    public boolean hasNext() {
       return authors.hasNext();
    }
    
    @Override
    public Author next() {
       if (hasNext()) {
           Author a = new Author(0, "", "");
           JSONObject authorNode = authors.next();
           a.setFirstName((String) authorNode.get("first_name"));
           a.setLastName((String) authorNode.get("last_name"));
           return a;
       }
       else {
           return null;
       }
    }
    

    这不管用吗<代码>私有迭代器作者和
    JSONArray authorNode=authors.next()您还应该提到您正在使用的json库。它不起作用。在
    a.setFirstName((String)authorNode.get(“first_name”))行中
    a.setLastName((字符串)authorNode.get(“姓氏”)我得到错误消息:“找不到适合get(String)的方法”,因为JSONArray没有该方法。既然我想迭代一个JSONArray,那么行
    public JSONIteratorAuthor(JSONObject JSONObject)
    是否也应该更改为
    public JSONIteratorAuthor(JSONArray JSONObject)
    。这就是为什么我需要json库,您正在使用。看起来,您没有使用“org.json”。您应该提到
    JSONArray/JSONObject的完整包名以及classpath.my bad中包含的jar文件名。我正在使用json.simple库,这不管用吗<代码>私有迭代器作者
    JSONArray authorNode=authors.next()您还应该提到您正在使用的json库。它不起作用。在
    a.setFirstName((String)authorNode.get(“first_name”))行中
    a.setLastName((字符串)authorNode.get(“姓氏”)我得到错误消息:“找不到适合get(String)的方法”,因为JSONArray没有该方法。既然我想迭代一个JSONArray,那么行
    public JSONIteratorAuthor(JSONObject JSONObject)
    是否也应该更改为
    public JSONIteratorAuthor(JSONArray JSONObject)
    。这就是为什么我需要json库,您正在使用。看起来,您没有使用“org.json”。您应该提到
    JSONArray/JSONObject的完整包名以及classpath.my bad中包含的jar文件名。我使用的是json.simple library我的json数据如下所示:您的代码给我的对象的名称值为“null”。我想我必须将迭代器指向键值“authors”。但是我不知道我怎么能做到这一点,我自己已经知道了,谢谢你的帮助。它帮助我了解了实际情况problem@Anjo9要将其标记为有用,请单击问题旁边的上箭头。下面是接受答案的绿色标记。请参见此处了解详细信息:我的JSON数据如下所示:您的代码为我提供了名称为“null”的对象。我想我必须将迭代器指向键值“authors”。但是我不知道我怎么能做到这一点,我自己已经知道了,谢谢你的帮助。它帮助我了解了实际情况problem@Anjo9要将其标记为有用,请单击问题旁边的上箭头。下面是接受答案的绿色标记。详情请参见此处: