gson筆記 解析json數據

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
相關文章
相關標籤/搜索