Я хочу создать JSON объект, значение одного из его свойств является массивом, он должен выглядеть следующим образом:
{
"id": 1,
"name": "Whatever",
"indices": [1, 2, 3, 4]
}
Запуск следующего кода:
private void createJsonWithArrayAsPropertyValue() throws IOException {
JsonObjectBuilder job = Json.createObjectBuilder();
job.add("id", 1);
job.add("name", "no-name");
job.add("indices", Json.createArrayBuilder()
.add(1)
.add(2)
.add(3)
.build());
System.out.println(new StringBuffer("\tJSON String = ").append(job.toString()).append("\n"));
JsonObject jsonObject = job.build();
Writer writer = new StringWriter();
// region Print the JSON object into a String
Json.createWriter(writer).write(jsonObject);
StringBuffer jsonString = new StringBuffer(writer.toString());
System.out.println(new StringBuffer("\tjsonString = ").append(jsonString).append("\n"));
// endregion
// region Print the JSON using PRETTY_PRINTING format
Map<String, Boolean> config = new HashMap<>();
config.put(JsonGenerator.PRETTY_PRINTING, true);
JsonWriterFactory writerFactory = Json.createWriterFactory(config);
writer = new StringWriter();
writerFactory.createWriter(writer).write(jsonObject);
jsonString = new StringBuffer(writer.toString());
System.out.println(new StringBuffer("\tjsonString (PRETTY_PRINTING) = ").append(jsonString).append("\n"));
// endregion Print the JSON using PRETTY_PRINTING format
System.out.println("-------------------------------------------------");
}
Создает объект JSON, используя com.json.JSONObject
Свойство indexes вводится в виде строки:
{
"id": 1,
"name": "Whatever",
"indices": "[1, 2, 3]"
}
Я ищу решение, которое не будет вводить значение элемента в качестве строки, и я не ограничен использованием какого-либо определенного c пакета.
ОБНОВЛЕНИЕ Использование javax.json.Json
как такового:
jo.put("indices", Json.createArrayBuilder()
.add(1)
.add(2)
.add(3)
.build());
pom . xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.beniregev</groupId>
<artifactId>demos_and_tutorials</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demos_and_tutorials</name>
<description>Java 8 + Spring Boot project for demos and tutorials</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.RC1</spring-cloud.version>
<javafaker.version>0.17.2</javafaker.version>
<mapdb.version>3.0.7</mapdb.version>
<android-json.version>0.0.20131108.vaadin1</android-json.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.json/javax.json-api -->
<dependency>
<groupId>javax.json</groupId>
<artifactId>javax.json-api</artifactId>
<version>1.1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish/javax.json -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1.4</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.javafaker</groupId>
<artifactId>javafaker</artifactId>
<version>${javafaker.version}</version>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mapdb/mapdb -->
<dependency>
<groupId>org.mapdb</groupId>
<artifactId>mapdb</artifactId>
<version>${mapdb.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
<version>${android-json.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
</project>
ОБНОВЛЕНИЕ 2: Я добавил зависимость для org.glassfi sh, чтобы javax.json
мог работать, так как скажем, по Java JSON Учебное пособие - JSON Java, а также по Java API для JSON Обработка - Начало работы . Обновление 3 Исключение, которое я получил из-за конфликта между зависимостями в моем pom. xml Я переместил свой код в отдельный проект и работает .
Я получаю исключение (я что-то упустил в моем пом. xml?):
javax.json.JsonException: Provider org.glassfish.json.JsonProviderImpl not found
at javax.json.spi.JsonProvider.provider(JsonProvider.java:99)
at javax.json.Json.createArrayBuilder(Json.java:262)
at com.beniregev.demos_and_tutorials.demos.JsonDemo.simpleJsonObjectWithArrayAsValue(JsonDemo.java:41)
at com.beniregev.demos_and_tutorials.demos.JsonDemo.main(JsonDemo.java:57)
Caused by: java.lang.ClassNotFoundException: org.glassfish.json.JsonProviderImpl
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
at javax.json.spi.JsonProvider.provider(JsonProvider.java:96)
... 3 more
Я буду признателен за любую помощь.