gson中負責json數據解析的類是JsonReader。html
Json格式有兩種結構,一種是對象(鍵值對的組合,無序),另一種是數組(值的有序集合)。git
所以針對這兩種格式,JsonReader提供了不一樣的處理方法。github
針對對象web
{
"isRemote":false,
"remote":{
"hubURL":"http://127.0.0.1:4444/wd/hub/",
"browser":"firefox",
"os":"WINDOWS"
},
"local":{
"browser":"webdriver.firefox.bin",
"path":"D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"
}
}json
下面讀取json對象的內容。數組
private Boolean isRemote = false;
private LocalBrowser lcBrowser;
private RemoteBrowser rmBrowser;google
private void readConf(InputStream in) throws IOException{spa
JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));firefox
try{
reader.beginObject(); //表示開始讀入對象,此時指向的是最外層的對象code
while(reader.hasNext()){ //判斷當前對象是否仍有屬性存在
String name = reader.nextName(); //若有則得到屬性名
if(name.equals("isRemote")){
isRemote = reader.nextBoolean();
}else if(name.equals("remote")){
rmBrowser=readRemote(reader);
}else if(name.equals("local")){
lcBrowser = readLocal(reader);
}else{
reader.skipValue(); //跳過不處理這個值
reader.endObject(); //表示對象讀取結束
}finally{
reader.close(); //關閉reader
}
}
private RemoteBrowser readRemote(JsonReader reader) throws IOException{
String hubURL = null;
String browser = null;
String os =null;
reader.beginObject(); //這時指向的是remote屬性對應的對象
while(reader.hasNext()){
String name = reader.nextName();
if(name.equals("hubURL")){
hubURL = reader.nextString();
}else if(name.equals("browser")){
browser = reader.nextString();
}else if(name.equals("os")){
os = reader.nextString();
}else{
reader.skipValue();
}
}
reader.endObject();
return new RemoteBrowser(hubURL, browser, os);
}
private LocalBrowser readLocal(JsonReader reader) throws IOException{
String browser = null;
String path = null;
reader.beginObject();
while(reader.hasNext()){
String name = reader.nextName();
if(name.equals("browser")){
browser = reader.nextString();
}else if(name.equals("path")){
path = reader.nextString();
}else{
reader.skipValue();
}
}
reader.endObject();
return new LocalBrowser(browser, path);
}
針對數組
[
{
"id": 912345678901,
"text": "How do I read a JSON stream in Java?",
"geo": null,
"user": {
"name": "json_newb",
"followers_count": 41
}
},
{
"id": 912345678902,
"text": "@json_newb just use JsonReader!",
"geo": [50.454722, -104.606667],
"user": {
"name": "jesse",
"followers_count": 2
}
}
]
public List<Message> readJsonStream(InputStream in) throws IOException {
JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
try {
return readMessagesArray(reader);
} finally {
reader.close();
}
}
public List<Message> readMessagesArray(JsonReader reader) throws IOException {
List<Message> messages = new ArrayList<Message>();
reader.beginArray(); //開始讀取數組,此時指向的是最外層的數組
while (reader.hasNext()) {
messages.add(readMessage(reader));//讀取數組元素
}
reader.endArray();
return messages;
}
參考連接:
json介紹
Gson