当前位置: 首页 > article >正文

第三百一十一节 Java JSON教程 - JSON模式、JSON Java

Java JSON教程 - JSON模式

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。

JSON模式也以JSON格式编写。它用于验证JSON数据。

JSON模式示例

以下代码显示了基本的JSON模式。

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "Book",
    "description": "A book from Java2s.com",
    "type": "object",
    "properties": {
        "id": {
            "description": "ID for JSON",
            "type": "integer"
        },
        "name": {
            "description": "Name for JSON",
            "type": "string"
        },
        "price": {
            "type": "number",
            "minimum": 0,
            "exclusiveMinimum": true
        }
    },
    "required": ["id", "name", "price"]
}

$schema 声明该模式是根据草案v4规范编写的。

title 关键字将标题设置为模式。

description 字段用于描述模式。

type 关键字定义了我们的JSON数据的第一个约束。

properties定义各种键及其值类型,要在JSON文件中使用的最小值和最大值。

必需标记所需的属性。

minimum 是对值的约束,表示最小可接受值。

exclusiveMinimumtrue表示该值应大于“minimum"的值。

maximum 是对值的约束,表示最大可接受值。

exclusiveMaximumtrue表示该值应大于'minimum'的值。

multipleOf 指定如果实例由此关键字的值除法的结果是整数,则数字实例是有效的。

maxLength 设置字符串的最大长度。

minLength 设置字符串的最小长度。

pattern 字段指定与值匹配的正则表达式。

Java JSON教程 - JSON Java

JSR 353解决了用于JSON处理的标准Java API,并作为JEE 7的一部分提供。

参考实现jsonp可以从https://jsonp.java.net/download.html下载。

要使用JSON Processing API编译应用程序,请在maven项目中声明对json-api的依赖关系。

api依赖不允许您运行应用程序。

<dependency>
    <groupId>javax.json</groupId>
    <artifactId>javax.json-api</artifactId>
    <version>1.0</version>
</dependency>

对于非Maven项目,JSON处理API jar(http://search.maven.org/remotecontent?filepath=javax/json/javax.json-api/1.0/javax.json-api-1.0.jar)可以是下载并包含在用于编译应用程序的类路径中。

要使用JSON Processing API运行应用程序,请在maven项目中声明对json-api实现的依赖。

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.0.4</version>
</dependency>

对于非Maven项目,可以通过http://search.maven.org/remotecontent?filepath=org/glassfish/javax.json/1.0.4/ 下载JSON Processing RI jar并将其包含在类路径中以运行应用程序javax.json-1.0.4.jar。

GlassFish 4.0已经包括JSON实现。对于Web应用程序,我们不需要在战争中包含实现jar。

在开发应用程序期间声明具有提供的作用域的json-api依赖关系。

<dependency>
    <groupId>javax.json</groupId>
    <artifactId>javax.json-api</artifactId>
    <scope>provided</scope>
    <version>1.0</version>
</dependency>

例1

以下代码显示了如何使用JsonReader将JSON数据读取到JSON对象模型。

import java.io.StringReader;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonReader;
import javax.json.JsonValue;
 
public class Main {
    public static void main(String[] args) {
        String personJSONData = 
            "  {" +
            "   \"name\": \"Jack\", " +
            "   \"age\" : 13, " +
            "   \"isMarried\" : false, " +
            "   \"address\": { " +
            "     \"street\": \"#1234, Main Street\", " +
            "     \"zipCode\": \"123456\" " +
            "   }, " +
            "   \"phoneNumbers\": [\"011-111-1111\", \"11-111-1111\"] " +
            " }";
         
        JsonReader reader = Json.createReader(new StringReader(personJSONData));
         
        JsonObject personObject = reader.readObject();
         
        reader.close();
         
        System.out.println("Name   : " + personObject.getString("name"));
        System.out.println("Age    : " + personObject.getInt("age"));
        System.out.println("Married: " + personObject.getBoolean("isMarried"));

        JsonObject addressObject = personObject.getJsonObject("address");
        System.out.println("Address: ");
        System.out.println(addressObject.getString("street"));
        System.out.println(addressObject.getString("zipCode"));
         
        System.out.println("Phone  : ");
         JsonArray phoneNumbersArray = personObject.getJsonArray("phoneNumbers");
        for (JsonValue jsonValue : phoneNumbersArray) {
            System.out.println(jsonValue.toString());
        }
    }
}

读取数组

JsonReader reader = Json.createReader(new StringReader(personJSONData));
JsonArray personArray = reader.readArray();
reader.close();


for (JsonValue jsonVal : personArray) {
    System.out.println(personObj.getValueType() + " - " 
    + ((JsonObject) personObj).getString("name"));
}

例2

以下代码显示了如何使用JsonObjectBuilder和JsonArrayBuilder构建JSON对象

import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
 
public class Main {
     
    public static void main(String[] args) {
        JsonObject personObject = Json.createObjectBuilder()
                .add("name", "John")
                .add("age", 13)
                .add("isMarried", false)
                .add("address", 
                     Json.createObjectBuilder().add("street", "Main Street")
                                               .add("city", "New York")
                                               .add("zipCode", "11111")
                                               .build()
                    )
                .add("phoneNumber", 
                     Json.createArrayBuilder().add("00-000-0000")
                                              .add("11-111-1111")
                                              .add("11-111-1112")
                                              .build()
                    )
                .build();
         
        System.out.println("Object: " + personObject);
    }
}

例3

以下代码显示了如何使用JsonWriter序列化JSON对象。

import java.io.StringWriter;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.json.JsonWriter;
 
public class Main {
     
    public static void main(String[] args) {
        JsonObject personObject = Json.createObjectBuilder()
                .add("name", "Jack")
                .add("age", 13)
                .add("isMarried", false)
                .add("address", 
                     Json.createObjectBuilder().add("street", "Main Street")
                                               .add("city", "New York")
                                               .add("zipCode", "11111")
                                               .build()
                    )
                .add("phoneNumber", 
                     Json.createArrayBuilder().add("00-000-0000")
                                              .add("11-111-1111")
                                              .add("11-111-1112")
                                              .build()
                    )
                .build();
         
        StringWriter stringWriter = new StringWriter();
        JsonWriter writer = Json.createWriter(stringWriter);
        writer.writeObject(personObject);
        writer.close();
        System.out.println(stringWriter.getBuffer().toString());
    }
 
}

http://www.kler.cn/a/381627.html

相关文章:

  • Issac ROS navigation测试
  • 如何完全剔除对Eureka的依赖,报错Cannot execute request on any known server
  • 《Vue3实战教程》5:响应式基础
  • 如何用gpt来分析链接里面的内容(比如分析论文链接)和分析包含多个文件中的一块代码
  • Jenkins 任意文件读取(CVE-2024-23897)修复及复现
  • Vue3中路由跳转之后删除携带的query参数
  • FPGA视频GTH 8b/10b编解码转PCIE3.0传输,基于XDMA中断架构,提供工程源码和技术支持
  • 《安全基石:等保测评的全方位解读》
  • Zabbix proxy 主动模式的实现
  • 三周精通FastAPI:32 探索如何使用pytest进行高效、全面的项目测试!
  • 微前端应用+MicApp、无界、乾坤、EMP+简要了解+部分场景应用
  • Qt——常用控件
  • 每天五分钟计算机视觉:什么是神经网络风格转换?
  • 「树链剖分」学习笔记
  • 【深度学习】batchsize太大或太小的优缺点,如何平衡batchsize大小
  • 矩阵特殊打印方式
  • 【Vue 全家桶】4、Vue中的ajax(http请求方法)
  • Apache HTTPD 换行解析漏洞(CVE-2017-15715)
  • faiss 用于检索10亿向量(维度768)的方法
  • 6. STM32之TIM实验--编码器接口()--(实验5:PWM驱动直流电机)
  • Vue中简单状态管理
  • PyTorch 2.0: 开启深度学习框架新纪元
  • Qt学习笔记第41到50讲
  • ubuntu 24.04中安装 Easyconnect,并解决版本与服务器不匹配问题
  • C#语言发展历史
  • Nginx配置文件编写示例