我有一个设置,它可以返回相当数量的信息。这是日志:
04-17 22:38:21.886: DEBUG/TestMYSQL(12603): Result of sql:
[{"id":"1","front_text":"the dog was so cute","back_text":"its name was dolly"},
{"id":"2","front_text":"plants use the sun","back_text":"isn't that interesting"},
{"id":"3","front_text":"plants can use the sun to create","back_text":"energy"},
{"id":"4","front_text":"a plant also needs minerals","back_text":"from the soil"},
{"id":"5","front_text":"without water the plant would","back_text":"probably die"},
{"id":"6","front_text":"plants are little machines","back_text":"who love to eat"}]
为了获得这些信息,我让它执行了一个 php 文件。下面是一些相关的Java、android代码:
.....
result = sb.toString();
Log.d(TAG, "Result of sql: " + result);
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
// parse json data
JSONObject json_data = null;
try {
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
json_data = jArray.getJSONObject(i);
}
return json_data;
它将结果转换为我可以玩的 jsonObject。
所以这是之前的一个步骤,php中的查询部分:
include 'connectMySQL.php';
mysql_select_db("card_db");
$q=mysql_query("SELECT * FROM ".$packname);
while($e=mysql_fetch_assoc($q)){
$output[]=$e;
}
print(json_encode($output));
mysql_close();
问题是我似乎只能访问 FINAL... eh 行。也就是说,在上面的数据中,我似乎只能访问id:6行。
我正在查看 auto_complete 和 JSONOBJECT,但目前我没有足够的经验来解决这个问题,而且已经晚了。
关于如何在 java 中循环遍历 jsonObject 有什么想法吗?
让我花点时间分析一下结构,然后再上交。我对 JSON 了解不多,但它看起来像这样:
我用我设置的表查询数据库,等等。 它返回数据行。 我想我的问题是如何将一行键值对编码为 JSON 对象,以及如何访问不同的“行”?
最佳答案
您将在循环的每次迭代中覆盖 json_data
引用的 JSONObject。所以最后,它总是返回 jArray
中的最后一个元素。
由于您需要返回多个对象,您可以:
简单地将
jArray
返回给调用函数。然而,这意味着调用者将不得不处理数据传输实现的细节,如果您决定更改库或转移到 XML,它会破坏大量代码并使其变得更加困难。返回调用代码知道并应该处理的实际对象的数组或列表。例如,您可以声明一个具有
id、front_text、back_text
的值对象 (VO),并且对于jArray
中的每个 JSONObject,您将创建一个新的 VO 并将将其放入一个数组中并返回。public class MyVO { final public String id; final public String frontText; final public String backText; public MyVO(String id, String ft, String bt) { this.id = id; this.frontText = ft; this.backText = bt; } } List<MyVo> vos = new ArrayList<MyVO>(); JSONArray jArray = new JSONArray(result); for (int i = 0; i < jArray.length(); i++) { json_data = jArray.getJSONObject(i); vos.add(new MyVO(json_data.getString("id"), json_data.getString("front_text"), json_data.getString("back_text")); }
在调用代码中,您可以检查 VO:
for(MyVO vo : vos) { //vo.id or vo.frontText or vo.backText }
关于PHP/Android 和 JSONObject;我似乎只能访问最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5698058/