我在 Java 中有一个嵌套数组,像这样:
String [] [] x;
在我的代码中,我将其转换为 JSON 字符串,以使用以下代码将其通过 @JavascriptInterface 桥传递到在 WebView 中运行的 javascript:
String ret = (new JSONArray(Arrays.asList(x))).toString();
这在较新的设备上运行良好,但在测试较旧的设备时我遇到了非常奇怪的行为。而不是像这样创建一个漂亮的字符串:
"[ [ 1.234, 5, 7 ], [ 23.456, 7, 8 ] ]"
它正在创建一个如下所示的字符串:
'["[Ljava.lang.String;@405ba988"]'
据我所知,我使用的所有对象(JSONArray、Arrays)和相应的成员函数(toString、asList)自 API 级别 1 以来就已存在。
我做错了什么,或者我是否缺少一些我需要做的事情来适应早期版本的 Android?
最佳答案
在 Android 4.4(api 19) 之前 following是构造函数代码:
public JSONArray(Collection copyFrom) {
this();
Collection<?> copyFromTyped = (Collection<?>) copyFrom;
values.addAll(copyFromTyped);
}
如您所见,它只是添加了集合的成员,这就是为什么您得到 '["[Ljava.lang.String;@405ba988"]'
没有对它们进行额外处理的原因.
在 Android 4.4(api 19) 中添加和更改了一些功能 wrap方法被添加到可以处理数组的 JSONObject
中,JSONArray
中的相同构造函数是 changed使用它:
public JSONArray(Collection copyFrom) {
this();
if (copyFrom != null) {
for (Iterator it = copyFrom.iterator(); it.hasNext();) {
put(JSONObject.wrap(it.next()));
}
}
}
关于java - 将嵌套数组转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46312281/