我在SD卡上有一组JSON对象。
我得到的文件内容如下:
File yourFile = new File("/mnt/extSdCard/test.json");
FileInputStream stream = new FileInputStream(yourFile);
String jString = null;
try {
FileChannel fc = stream.getChannel();
MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
/* Instead of using default, pass in a decoder. */
jString = Charset.defaultCharset().decode(bb).toString();
}
finally {
stream.close();
}
结构是这样的:
[{"name":"john"},{"name":"fred"},{"name":"sam"}]
我希望能够解析它们以制作listView。在JavaScript中,我可以将它们作为AJAX请求获取,然后执行
var people = JSON.parse(data.responseText);
然后遍历数组。但我是java的一个完整的新手 - 我找到了单独执行这些事情的示例代码,但我不能将它们全部放在一起。任何帮助非常感谢。
答案 0 :(得分:2)
如果你把它作为一个字符串,你应该能够用这样的东西把它解析成JSONObject
:
JSONObject jObj = null;
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
Log.i(TAG, "JSON Data Parsed: " + jObj.toString());
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
我还会将数据(在您的示例中)放入数组中,因此它看起来像:
{"names": [{"name": "john"},{"name": "fred"},{"name": "sam"}]}
然后再次阅读你的对象,你可以用这样的东西将它放入一个数组(或其他我想的东西):
// create an empty list
ArrayList<String> l = new ArrayList<String>();
// pull the array with the key 'names'
JSONArray array = jObj.getJSONArray("names");
// loop through the new array
for(int i = 0; i < array.length(); i++){
// pull a value from the array based on the key 'name'
l.add(array.getJSONObject(i).getString("name"));
}
希望至少其中一些有帮助(或者至少指出你正确的方向)。这里也有很多资源。
修改强>
阅读JSON格式。 []
表示数组,{}
表示对象,因此您有一个对象数组。这就是为什么我建议改变你的格式。如果您按照格式设置,请使用Mr.Me发布的答案,或者只是将字符串拆分为特殊字符并将其放入阵列中。
答案 1 :(得分:2)
问题是上面的JSON结构表示JSONArray而不是JSONObject
因此,在获得jstring
后,只需执行此操作
JSONArray array = new JSONArray(jString);
for(int i=0; i< array.length(); i++){
JSONObject obj = array.getJSONObject(i);
String value = obj.getString("name");
}
答案 2 :(得分:0)
试试这个
String[] from = new String[] {"name"};
int[] to = new int[] { R.id.name};
List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
try
{
JSONArray names = new JSONArray(jsonString);
Log.i("MyList","Number of names " + names.length());
for (int j = 0; j < names.length(); j++)
{
JSONObject jsonObject = names.getJSONObject(j);
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", jsonObject.getString("name"));
fillMaps.add(map);
}
}
catch (Exception e)
{
e.printStackTrace();
}
SimpleAdapter adapter = new SimpleAdapter(context, fillMaps, R.layout.result, from, to);
mListView.setAdapter(adapter);
此处mListView
是您预定义的ListView
。
如果有的话,请随时在这里分享您的疑虑。