JAVA创建不带引号的Json数组

时间:2018-09-20 06:37:01

标签: java arrays json

我有一个嵌套的json,它的元素之一是一个整数数组。

我想要这样的输出:

{ "arguments" : [ { "array": [1, 2, 3] } ] }

但是我一直用这样的引号接收数组:

{ "arguments" : [ { "array" : "[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);
    }
}

编辑

感谢乔恩·斯基特(Jon Skeet),我设法做到了

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()));

尽管我认为可能会有更好看的方式, 谢谢

1 个答案:

答案 0 :(得分:1)

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

Arrays.toString(new int[] {1,2,3})

您在这里传递字符串,您如何期望对象生成器知道它应该是一个集合而不是字符串?它只是一个愚蠢的VM,即使看到字符串是数组的字符串版本,如果看到字符串,它也会将其视为字符串。如果VM看到字符串“ 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))));