是Android新手。我正在创建一个解析JSON数据并在ListView中显示它的android项目。我正在使用Eclipse来创建项目。我在raw文件夹中创建了一个名为userinput.json的文件,它是res的子文件夹。我已经在文件中提供了这些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"}
]
我的要求是将Raw资源中声明的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 :(得分: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 .....
答案 1 :(得分:0)
您可以在Android上使用Java的扫描程序类来解析原始数据文件并创建JSONArray。假设您的 res / raw 目录中有一个名为 my_raw_json.json 的文件:
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);