我不知道支持 JSON 数组(“数据”是数组数组)和 Java 对象字段之间映射的库。
gson库允许您将 JSON 数组映射到 java 字符串数组的数组,但是您必须将其转换为您的对象模型。你可以将你的 JSON 解析成这个对象:
class DataWrapper
{
String[] columns;
String[][] data;
}
另一种解决方案是使用 JSonReader 并使用此类流出您的对象:
import java.io.IOException;
import java.io.Reader;
import java.util.Iterator;
import com.google.gson.stream.JsonReader;
public class TransportJSonReader implements Iterator<Transport> {
protected JsonReader jsonReader;
public TransportJSonReader(Reader reader) throws IOException
{
jsonReader = new JsonReader(reader);
jsonReader.beginObject();
//columns
jsonReader.nextName();
jsonReader.skipValue();
//data
jsonReader.nextName();
jsonReader.beginArray();
}
@Override
public boolean hasNext() {
try {
return jsonReader.hasNext();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public Transport next() {
if (!hasNext()) throw new IllegalStateException();
try {
jsonReader.beginArray();
String name = jsonReader.nextString();
String description = jsonReader.nextString();
String id = jsonReader.nextString();
jsonReader.endArray();
return new Transport(id, name, description);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
它是一个迭代器,因此您可以通过以下方式使用它:
TransportJSonReader reader = new TransportJSonReader(new StringReader(json));
while(reader.hasNext()) System.out.println(reader.next());