猿问

JAVA创建不带引号的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()));

虽然我认为可能有更好看的方式,谢谢


慕斯王
浏览 349回答 1
1回答

收到一只叮咚

您正在添加一个名为“array”的对象,并告诉对象构建器它是一个字符串:Arrays.toString(new int[] {1,2,3})您在这里传递一个字符串,您如何期望对象生成器知道它应该是一个集合而不是字符串?它只是一个愚蠢的虚拟机,如果它看到字符串它认为它是一个字符串,即使该字符串是数组的字符串版本。如果 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))));
随时随地看视频慕课网APP

相关分类

Java
我要回答