我正在构建一个需要下载并与在线数据库同步的Android应用程序,我将应用程序中的查询发送到PHP页面,该页面将以JSON格式返回数据库中的相关行。
有人能告诉我遍历JSON数组的最佳方法吗?
我收到一个对象数组:[{json object},{json object},{json object}]
可以用来访问数组中的JSONObjects的最简单的代码是什么?
编辑:现在我想起来了,我用来迭代循环的方法是:
for (String row: json){
id = row.getInt("id");
name = row.getString("name");
password = row.getString("password");
}
所以我想我已经以某种方式能够将返回的Json转换为可迭代数组。任何想法我如何才能实现这一点?
我为我的流浪感到抱歉,但我从网上找到的一个例子中找到了这个工作,此后一直无法找到它。
9条答案
按热度按时间knpiaxh11#
我认为这段代码简短而清晰:
你在找这个吗
ljo96ir52#
我用了两种不同的方法
1.)制作Map
2.)创建一个JSONArray名称
guz6ccqo3#
不幸的是,
JSONArray
**不支持foreach
语句,例如:kninwzqo4#
当我尝试@vipw的建议时,我遇到了这个例外:
The method getJSONObject(int) is undefined for the type JSONArray
这反而对我起了作用:
xvw2m8pv5#
如果你使用的是JSON.org Java implementation,它是开源的,你可以让JSONArray实现
Iterable
接口,并向类中添加以下方法:这将使JSONArray的所有示例都是可迭代的,这意味着
for (Object foo : bar)
语法现在可以使用它(注意,foo必须是Object,因为JSONArray没有声明类型)。所有这些都可以工作,因为JSONArray类由一个简单的ArrayList支持,它已经是可迭代的。我想其他开源实现也同样容易更改。rbl8hiat6#
在阵列上,查找:
vjhs03f77#
您正在为每个条目使用相同的Cast对象。在每次迭代中,您只是更改了相同的对象,而不是创建一个新对象。
这段代码应该可以修复它:
ulydmbyx8#
在遍历JSON数组(org.json.JSONArray,内置于Android)时,要注意null对象;例如,您可能会得到
"null"
而不是null字符串。检查可能看起来像:
wdebmtf29#
或者,特别是在没有
iterator()
的Android上,你可以定义自己的迭代器:当你假设你的数组的元素类型都是相同的时候,它就起作用了。在许多情况下,这可能不是一个好的实践,因此您可能希望添加更多的类型检查。
然后你可以用途: