java - 将嵌套数组转换为 JSON

标签 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?

最佳答案

在 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/

相关文章:

java.lang.IllegalStateException 内容 - 处置

java - 如何在 @Transactional SpringBootTest 测试用例中测试 Spring Batch 作业?

android - 使用 calabash-android 解锁图案

php - json 显示 mysql 结果的重复输出

java - JSONObject 文本必须以 '{' 错误开头

json - 如何实时更新 JSON 响应 (Express NodeJS)

java - Android:从 JNI 调用调用 shell 命令

java - Android : Should I remove @Override from facebook. java?

android - zxing二维码扫描器中取景框的独特尺寸

android - 如何查找哪个库使用 AndroidX