0

我在 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 新手——我找到了单独执行这些操作的示例代码,但我无法将它们全部放在一起。非常感谢任何帮助。

4

3 回答 3

2

如果你把它作为一个字符串,你应该能够将它解析为 a 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 发布的答案,或者只是将您的字符串拆分为特殊字符,然后以这种方式将它们放入一个数组中。

于 2013-05-03T16:09:28.133 回答
2

问题是上面的 JSON 结构代表的是 JSONArray 而不是 JSONObject

JSON 语法

所以在得到你的jstring只是这样做之后

JSONArray array = new JSONArray(jString);
for(int i=0; i< array.length(); i++){
  JSONObject obj = array.getJSONObject(i);
  String value = obj.getString("name");
 }
于 2013-05-03T16:44:09.423 回答
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. 如果有任何疑问,请随时在这里分享您的疑问。

于 2013-05-03T17:03:01.257 回答