将嵌套数组转换为JSON

时间:2017-09-20 02:26:21

标签: java android json

我在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?

1 个答案:

答案 0 :(得分:3)

在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中的相同构造函数为{{3}使用它:

public JSONArray(Collection copyFrom) {
    this();
    if (copyFrom != null) {
        for (Iterator it = copyFrom.iterator(); it.hasNext();) {
            put(JSONObject.wrap(it.next()));
        }
    }
}