2014-07-18 97 views
0

我需要讀取.json文件並在運行時更改字段。閱讀.json文件 - BOM問題?

問題是,當我嘗試閱讀:

JSONObject jOb=null; 


     try { 
      jOb = new JSONObject(filePath); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     System.out.println(jOb.toString()); 
     try { 
      jOb.put("responseType", "TESTicles"); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     System.out.println(""+jOb); 

我得到以下錯誤:「一個JSONObject文本必須以‘{’以1字2號線1]」

我想是因爲我的文件開頭的問題可能是BOM標記「{」

下面是一個示例(我的JSON文件的開頭):

{ 
    "base":{  
    "sites":{ 
     "local":{ 
     "name":"siteA", 
     "datasource":{ 
... 

我需要刪除BOM標記才能讀取文件,但是如何在不讀取文件的情況下執行此操作?

我讀過:

This,它this和許多其他的東西,但我似乎無法找到任何解決我的問題。我能做什麼?

+0

你使用[this JSONObject](http://www.json.org/javadoc/org/json/JSONObject.html#JSONObject%28java.lang.String%29)API嗎?它沒有文件路徑構造函數。 – McDowell

回答

1

假設您使用library defined at json.org,您的代碼所做的就是將文件名稱視爲JSON字符串,並嘗試將其解釋爲JSON對象。

閱讀文檔,你需要打開該文件作爲輸入流,把它作爲一個JSONTokener構造函數的參數,你作爲參數傳遞到您的JSONObject構造,是這樣的:

InputStream foo = new FileInputStream(filePath); 
JSONTokener t = new JSONTokener(foo); 
JSONObject obj = new JSONObject(t); 

注意:以上未經測試甚至編譯。

+0

這是真的,我的壞。我修復了它。不過,我仍然有同樣的錯誤。編輯:固定 – SaintLike