我有一个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;
}
}
}
答案 0 :(得分:0)
由于缺乏有关JSON数据结构的信息,我假设如下:
JSONArray
对象用JSONArray
包含JSONObject
s JSONObject
已获得合适的键值对在这种情况下,以下解决方案应该有效。它利用了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;
}
}
编辑:鉴于您的实际输入,解决方案很简单:数组包含对象,其中包含其他数组。因此,要使上述代码起作用,您必须执行以下操作(其中parsedJson
是您从实际输入文件中获得的内容(在dropbox中发布):
Iterator array = ((JSONArray) parsedJson).iterator();
while (array.hasNext()) {
JSONObject json = (JSONObject) array.next();
JSONArray authors = (JSONArray)json.get("authors");
JSONIteratorAuthor test = new JSONIteratorAuthor(authors);
while (test.hasNext()) {
System.out.println(test.next());
}
}