2014-11-06 111 views
0

剛到android。我正在創建一個解析JSON數據並將其顯示在ListView中的Android項目。我正在使用Eclipse來創建項目。我在res的子文件夾的原始文件夾中創建了一個名爲userinput.json的文件。我已經在文件中提供了這些JSON數據。如何從JSON數據文件創建JSON數組?

[ 
    {"name":"Company A", "hometown":"NJ"}, 
    {"name":"Company B", "hometown":"PA"}, 
    {"name":"Company C", "hometown":"CT"}, 
    {"name":"Company D", "hometown":"NY"}, 
    {"name":"Company E", "hometown":"NJ"} 
    ] 

我的要求是將原始資源中聲明的這個JSON數據轉換成JSON數組。 因爲我已經在一個文件中聲明瞭json數據,所以我必須從資源中訪問它,因此我使用BufferedReader來讀取文件。 但試圖將StringBuilder對象轉換爲JSON數組時,我返回null。 這是我寫的代碼:

BufferedReader jsonReader = new BufferedReader(new InputStreamReader(
       this.getResources().openRawResource(R.raw.userinput))); 
StringBuilder jsonBuilder = new StringBuilder(); 
try { 
     for (String line = null; (line = jsonReader.readLine()) != null;) 
     { 
       jsonBuilder.append(line).append("\n"); 
     } 
     jTokener = new JSONTokener(jsonBuilder.toString()); 
     jsonArray = new JSONArray(jTokener.toString()); 
    } 
    catch (Exception e) 
    { 
     throw new RuntimeException(e); 
    } 
ArrayList<User> newArrayOfUsers = User.JsonData(jsonArray); 

在一個單獨的Java文件我有以下兩種方法來我的JSON數組轉換成Java對象:

public User(JSONObject object) 
    { 
     try 
     { 
      this.name = object.getString(name); 
      this.hometown = object.getString(hometown); 
     } 
     catch(JSONException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

public static ArrayList<User> JsonData(JSONArray jsonArray) 
    { 
     ArrayList<User> users = new ArrayList<User>(); 
     for(int i = 0; i < jsonArray.length(); i++) 
     { 
      try 
      { 
       users.add(new User(jsonArray.getJSONObject(i))); 
      } 
      catch(JSONException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
     return users; 
    } 

我不知道,無論是上午以正確的方式做到這一點,任何人都可以請指導我如何從StringBuilder獲取JSON數組?

+0

沒有必要'JSONTokener'如果你正在使用'JSONArray' – Selvin 2014-11-06 13:13:53

+0

你能告訴我怎麼轉換我在Stringbuilder對象中獲取的數據給JSONArray? – Harikrishnan 2014-11-06 13:21:04

+0

FSM保存我...... **以與放入JSONTokener構造函數相同的方式** ......愛因斯坦對人類是正確的... – Selvin 2014-11-06 13:22:05

回答

1

這個工程...

BufferedReader jsonReader = new BufferedReader(new InputStreamReader(
      this.getResources().openRawResource(R.raw.userinput))); 
    StringBuilder jsonBuilder = new StringBuilder(); 
    try { 
     for (String line = null; (line = jsonReader.readLine()) != null;) { 
      jsonBuilder.append(line).append("\n"); 
     } 
     Toast.makeText(this, jsonBuilder.toString(), 1).show(); 
     //JSONTokener jTokener = new JSONTokener(jsonBuilder.toString()); 
     JSONArray jsonArray = new JSONArray(jsonBuilder.toString()); 

     for(int i=0;i<jsonArray.length();i++) 
     { 
      JSONObject tmpjsonobject=jsonArray.getJSONObject(i); 
      Toast.makeText(this, tmpjsonobject.getString("name")+"\n"+tmpjsonobject.getString("hometown"), 1).show(); 
     } 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 

和@Salvin是正確的......沒有必要JsonTokener .....

0

可以Java的掃描儀類Android上解析一個原始數據文件並創建一個JSONArray。假設你有一個叫my_raw_json.json文件在您RES /生 DIR:

Scanner scanner = new Scanner(context.getResources().openRawResource(R.raw.my_raw_json)); 
    String json = scanner.useDelimiter(REGEX_INPUT_BOUNDARY_BEGINNING).next(); 
    JSONArray array = new JSONArray(json);