Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA创建不带引号的Json数组_Java_Arrays_Json - Fatal编程技术网

JAVA创建不带引号的Json数组

JAVA创建不带引号的Json数组,java,arrays,json,Java,Arrays,Json,我有一个嵌套的json,其中一个元素是整数数组 我希望得到如下输出: JsonArrayBuilder arguments = Json.createArrayBuilder().add(Json.createObjectBuilder().add("array", Json.createArrayBuilder().add(1).add(2).add(3)))); {“参数”:[{“数组”:[1,2,3]}]} 但我一直收到这样引用的数组: JsonArrayBuilder argument

我有一个嵌套的json,其中一个元素是整数数组

我希望得到如下输出:

JsonArrayBuilder arguments = Json.createArrayBuilder().add(Json.createObjectBuilder().add("array", Json.createArrayBuilder().add(1).add(2).add(3))));
{“参数”:[{“数组”:[1,2,3]}]}

但我一直收到这样引用的数组:

JsonArrayBuilder arguments = Json.createArrayBuilder().add(Json.createObjectBuilder().add("array", Json.createArrayBuilder().add(1).add(2).add(3))));
{“参数”:[{“数组”:“[1,2,3]”}]}

这是我的密码:

import javax.json.Json;
import javax.json.JsonArrayBuilder;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        JsonArrayBuilder arguments = Json.createArrayBuilder().add(Json.createObjectBuilder().add("array", Arrays.toString(new int[] {1,2,3})));
        String json = Json.createObjectBuilder().add("arguments", arguments).build().toString();
        System.out.println(json);
    }
}
编辑

多亏了乔恩·斯基特,我才做到了这一点

int[] ints = {1, 2, 3};
JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
for (int i : ints) {
        arrayBuilder.add(i);
}
JsonArrayBuilder arguments = 
Json.createArrayBuilder().add(Json.createObjectBuilder().add("array", arrayBuilder.build()));
虽然我认为可能有一种更好看的方式,
谢谢

您正在添加一个名为“数组”的对象,并告诉对象生成器它是一个字符串:

Arrays.toString(new int[] {1,2,3})
在这里传递一个字符串,您如何期望对象生成器知道它应该是一个集合而不是字符串?它只是一个哑VM,如果它看到字符串,它会认为它是一个字符串,即使该字符串是数组的字符串版本。如果虚拟机看到字符串“ferrari”,它仍然认为它是字符串而不是真正的ferrari,对吗?;)

您要做的是在右侧,而不是Arrays.toString创建另一个数组生成器,将所有int对象逐个添加到其中,并添加结果对象,而不是“Arrays.toString(new int[]{1,2,3})”大致如下:

JsonArrayBuilder arguments = Json.createArrayBuilder().add(Json.createObjectBuilder().add("array", Json.createArrayBuilder().add(1).add(2).add(3))));

你要经过建筑工人。首先尝试调用
build()
。为什么要这样做?您知道您可能会以无效的json结束,对吗?
Arrays.toString(new int[]{1,2,3})
将为您完成此操作-尝试其他操作。提示:您正在创建一个数组生成器,但只调用一次
add
。这将创建一个包含一个元素的数组。您需要一个包含三个元素的数组,因此需要调用
add
三次。类似的问题:很明显,您会将整个内容放入一个自动执行该操作的方法中,而不是将数据内联并硬编码到代码中:P@HopefullyHelpful我希望OP明白这一点,他的代码只是为了展示