我有一个嵌套的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()));
尽管我认为可能会有更好看的方式, 谢谢
答案 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))));