Java原始数组转换为JSONArray

3
我正在尝试将Java基本数组转换为JSONArray,但我遇到了奇怪的行为。我的代码如下所示。
long [] array = new long[]{1, 2, 3};
JSONArray jsonArray = new JSONArray(Arrays.asList(array));
jsonArray.toString();

输出是 ["[J@532372dc"]

为什么会出现这样的输出?我想要得到像这样的输出 [1, 2, 3]


new JSONArray(array)足以将(原始)数组提供给构造函数。 - user2864740
3个回答

4

问题:

Arrays.asList(array)

你不能将原始类型的数组转换为需要是对象类型的集合。由于 asList 需要一个 T...,请注意它需要是一个对象。

为什么它能工作呢?

那是因为在传递参数时,由于数组是对象类型,它会自动装箱。

解决方案:

您需要将其更改为其包装类,并将其用作数组。

示例:

Long[] array = new Long[]{1L, 2L, 3L};
JSONArray jsonArray = new JSONArray(Arrays.asList(array));
jsonArray.toString();

result:

[1, 2, 3]

你需要将array的值转换为long,否则会出现“类型不匹配:无法从int转换为Long”的错误。 - Apoorv
@Apoorv不用了,我可以直接在它上面添加一个修饰符。 - Rod_Algonquin
是的,你可以用任何一种方式来完成它。 - Apoorv
关于自动装箱在Java中,自动装箱是一个很方便的机制,可以将基本数据类型自动转换为其对应的包装类。例如,int类型的变量可以自动转换为Integer对象。这种转换是通过Java编译器在背后完成的。当您使用基本数据类型时,编译器会自动为您创建一个包装类对象,并将该对象的值设置为您提供的基本数据类型的值。例如,如果您将int类型的变量传递给一个方法,该方法需要接受一个Integer对象作为参数,则编译器会自动将int类型的变量转换为Integer对象。这个过程就是自动装箱。总的来说,自动装箱可以让我们更方便地在基本数据类型和包装类之间进行转换。 - vmtrue
我们如何进行反转操作?比如我有一个String[]数组,我想将它转换成json格式,如{'0','1','2'}。 - Suresh Parmar

0

如果你只是想将一个原始的整数数组转换为 JSONArray,那么简单明了地说:

JSONArray jsonArray = new JSONArray(Arrays.asList(longArray).get(0));

* 你需要一个 try/catch 块


0

试试这个...

你需要将 long 转换为 Long,然后才能在 JSONArray 中使用。

    long [] array = new long[]{1, 2, 3};
    List<Long> longArray = asList(array);

    JSONArray jsonArray = new JSONArray(longArray);
    jsonArray.toString();

asList() 方法

public static List<Long> asList(final long[] l) {
    return new AbstractList<Long>() {
        public Long get(int i) {return l[i];}
        // throws NPE if val == null
        public Long set(int i, Long val) {
            Long oldVal = l[i];
            l[i] = val;
            return oldVal;
        }
        public int size() { return l.length;}
    };
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接