【发布时间】:2012-11-27 06:18:30
【问题描述】:
getString() 和 optString() 在 JSON 中有什么区别?
【问题讨论】:
-
optString在您不确定 JSON 请求格式是否会保持不变的情况下很有用......即,在 JSON 请求上调用getString可能一开始可以工作,但是如果它在未来发生变化,导致密钥不再存在,则会引发异常并且您的应用可能会崩溃。
getString() 和 optString() 在 JSON 中有什么区别?
【问题讨论】:
optString 在您不确定 JSON 请求格式是否会保持不变的情况下很有用......即,在 JSON 请求上调用 getString 可能一开始可以工作,但是如果它在未来发生变化,导致密钥不再存在,则会引发异常并且您的应用可能会崩溃。
正如 Diego 所提到的,在此处发布问题之前,最好查看 documentation(此链接现已过期 - 幸好我们有 Wayback Machine!),但现在您已经:
不同之处在于,如果您指定的键不存在,optString 将返回空字符串 ("")。另一方面,getString 会抛出 JSONException。如果数据丢失是一个错误,请使用getString,如果您不确定它是否存在,请使用optString。
编辑:文档中的完整描述:
获取与键关联的可选字符串。如果没有这样的键,它会返回一个空字符串。如果该值不是字符串且不为空,则将其转换为字符串。
【讨论】:
public java.lang.String optString(int index) 获取与索引关联的可选字符串值。如果该索引处没有值,则返回一个空字符串。如果该值不是字符串且不为空,则将其转换为字符串。 参数: index - 索引必须介于 0 和 length() - 1 之间。 回报: 一个字符串值。
【讨论】:
如果你想避免NullPointerException,你最好使用optString()
如果你在任何时候都从JSON获取数据,你可能有null数据对应一个特定的Key值,那个时候不要实现Null条件,最好使用这个优化的方法optString("<keyname>")
【讨论】:
1) getString(String name):- 该方法如果存在则返回按名称映射的String值,必要时强制转换,如果不存在则抛出JSONException映射存在。
2)optString(String name):-这个方法返回name映射的String值,如果存在的话,必要时强制,或者空字符串("") 如果不存在这样的映射。
【讨论】:
optString() 用于克服 NullPointerException,我们在使用 getString() 时得到的,当所需的键在 json 中不存在时,它基本上替换为默认值。
示例让输入的Json为
{
"name":"abhi",
"country":"india"
}
当你执行时现在在 java 中
String city = json.getString("city");
它会抛出一个NullPointerException。
通过使用optString(String key, String default),我们可以克服上述问题。
String city= json.optString("city","default");
System.out.println(city);
输出:默认
【讨论】: