2014-11-06 86 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);