首页 > 编程语言 >Java的JSON处理

Java的JSON处理

时间:2023-06-16 10:33:07浏览次数:51  
标签:Java name 处理 add born JSON var occupation

Java的JSON处理

用于 JSON 处理的 Java API(JSON-P)提供可移植的 API,以使用对象模型和流式 API 来解析,生成,转换和查询 JSON。 JSON-P 中使用 JSON 的两种方式有两种:流式 API 和对象模型 API。

  1. JSON-P 流式 API

    流式 API 将解析和生成控制移交给程序员。 流式 API 提供了基于事件的解析器,并允许应用开发人员请求下一个事件,而不是在回调中处理该事件。 这称为拉方法。

    名称 描述
    Json 包含用于创建 JSON 解析器,生成器及其工厂的静态方法。
    JsonParser 表示一个基于事件的解析器,它从流中读取 JSON 数据。
    JsonGenerator 将 JSON 数据一次写入一个值。
  2. JSON-P 对象模型 API

    对象模型 API 创建一个树形结构,表示内存中的 JSON 数据。 可以灵活地导航和查询树。 另一方面,对象模型 API 的效率通常不如流模型,并且需要更多的内存。

    名称 描述
    Json 包含用于创建 JSON 解析器,生成器及其工厂的静态方法。
    JsonObjectBuilder 通过添加应用代码中的值在内存中创建对象模型。
    JsonArrayBuilder 通过添加应用代码中的值在内存中创建数组模型。
    JsonReader 从输入源读取JsonObjectJsonArray
    JsonWriter JsonObjectJsonArray写入输出源。
  3. JSON-P JsonObjectBuilder示例

    public class JsonObjectBuilderEx {
    
        public static void main(String[] args) {
    
            var born = LocalDate.of(1992, 3, 2).toString();
    
            var json = Json.createObjectBuilder()
                    .add("name", "John Doe")
                    .add("occupation", "gardener")
                    .add("born", born).build();
    
            var result = json.toString();
    
            System.out.println(result);
        }
    }
    

    createObjectBuilder()创建一个JsonObjectBuilder。 新的对将插入add()。 最后,使用build()结束字符串。

    var json = Json.createObjectBuilder()
        .add("name", "John Doe")
        .add("occupation", "gardener")
        .add("born", born).build();
    

    输出:

    {"name":"John Doe","occupation":"gardener","born":"1992-03-02"}
    

    PRETTY_PRINTING

    通过JsonGenerator.PRETTY_PRINTING配置设置,我们可以设置写入器进行漂亮的打印。

    public class JsonPrettyPrintEx {
    
        public static void main(String[] args) {
    
            var born = LocalDate.of(1992, 3, 2).toString();
    
            var json = Json.createObjectBuilder()
                    .add("name", "John Doe")
                    .add("occupation", "gardener")
                    .add("born", born).build();
    
            var config = new HashMap<String, Boolean>();
            config.put(JsonGenerator.PRETTY_PRINTING, true);
    
            var jwf = Json.createWriterFactory(config);
            var sw = new StringWriter();
    
            try (var jsonWriter = jwf.createWriter(sw)) {
    
                jsonWriter.writeObject(json);
                System.out.println(sw.toString());
            }
        }
    }
    

    配置文件被传递到JsonWriterFactory

    var config = new HashMap<String, Boolean>();
    config.put(JsonGenerator.PRETTY_PRINTING, true);
    
    var jwf = Json.createWriterFactory(config);
    

    输出:

    {
        "name": "John Doe",
        "occupation": "gardener",
        "born": "1992-03-02"
    }
    
  4. JSON-P JsonArrayBuilder

    JsonArrayBuilder是用于创建和修改JsonArray对象的构建器。

    public class JsonArrayBuilderEx {
    
        public static void main(String[] args) {
    
            var ab = Json.createArrayBuilder();
    
            var users = createUsers();
    
            users.forEach(user -> {
    
                var ob = Json.createObjectBuilder();
                ob.add("name", user.getName());
                ob.add("occupation", user.getOccupation());
                ob.add("born", user.getBorn().toString());
    
                ab.add(ob);
            });
    
            var config = new HashMap<String, Boolean>();
            config.put(JsonGenerator.PRETTY_PRINTING, true);
    
            var jwf = Json.createWriterFactory(config);
            var sw = new StringWriter();
    
            try (var jsonWriter = jwf.createWriter(sw)) {
    
                jsonWriter.writeArray(jsonArray);
    
                System.out.println(sw);
            }
        }
    
        public static List<User> createUsers() {
    
            var born1 = LocalDate.of(1992, 3, 2);
            var u1 = new User("John Doe", "gardener", born1);
    
            var born2 = LocalDate.of(1967, 11, 22);
            var u2 = new User("Brian Flemming", "teacher", born2);
    
            var born3 = LocalDate.of(1995, 4, 7);
            var u3 = new User("Lucy Black", "accountant", born3);
    
            var born4 = LocalDate.of(1972, 8, 30);
            var u4 = new User("John Doe", "gardener", born4);
    
            return List.of(u1, u2, u3, u4);
        }
    }
    

    createArrayBuilder()创建一个JsonArrayBuilder

    var ab = Json.createArrayBuilder();
    

    在此 for 循环中,我们创建 JSON 对象并将其添加到构建器中。

    users.forEach(user -> {
    
        var ob = Json.createObjectBuilder();
        ob.add("name", user.getName());
        ob.add("occupation", user.getOccupation());
        ob.add("born", user.getBorn().toString());
    
        ab.add(ob);
    });
    

    输出结果:

    [
        {
            "name": "John Doe",
            "occupation": "gardener",
            "born": "1992-03-02"
        },
        {
            "name": "Brian Flemming",
            "occupation": "teacher",
            "born": "1967-11-22"
        },
        {
            "name": "Lucy Black",
            "occupation": "accountant",
            "born": "1995-04-07"
        },
        {
            "name": "John Doe",
            "occupation": "gardener",
            "born": "1972-08-30"
        }
    ]
    
  5. JSON-P JsonParser

    JsonParser使用请求解析编程模型解析 JSON。 在此模型中,客户端代码控制线程并在处理每个元素之后调用方法next()将解析器前进到下一个状态。

    解析器生成以下事件之一:START_OBJECTEND_OBJECTSTART_ARRAYEND_ARRAYKEY_NAMEVALUE_STRINGVALUE_NUMBERVALUE_TRUEVALUE_FALSEVALUE_NULL

    解析user.josn文件

    [
      {
        "name": "John Doe",
        "occupation": "gardener",
        "born": "1992-03-02"
      },
      {
        "name": "Brian Flemming",
        "occupation": "teacher",
        "born": "1967-11-22"
      },
      {
        "name": "Lucy Black",
        "occupation": "accountant",
        "born": "1995-04-07"
      },
      {
        "name": "William Bean",
        "occupation": "pilot",
        "born": "1977-10-31"
      }
    ]
    

    我们使用 JSON-P 流式 API 解析users.json文件。

    public class JsonParserSimpleEx {
    
        public static void main(String[] args) throws FileNotFoundException {
    
            var is = new FileInputStream("src/main/resources/users.json");
    
            var factory = Json.createParserFactory(null);
            var parser = factory.createParser(is, StandardCharsets.UTF_8);
    
            if (!parser.hasNext() && parser.next() != JsonParser.Event.START_ARRAY) {
    
                return;
            }
    
            // looping over object attributes
            while (parser.hasNext()) {
    
                var event = parser.next();
    
                // starting object
                if (event == JsonParser.Event.START_OBJECT) {
    
                    while (parser.hasNext()) {
    
                        event = parser.next();
    
                        if (event == JsonParser.Event.KEY_NAME) {
    
                            var key = parser.getString();
    
                            switch (key) {
    
                                case "name":
                                    parser.next();
    
                                    System.out.printf("Name: %s%n", parser.getString());
                                    break;
    
                                case "occupation":
                                    parser.next();
    
                                    System.out.printf("Occupation: %s%n", parser.getString());
                                    break;
    
                                case "born":
                                    parser.next();
    
                                    System.out.printf("Born: %s%n%n", parser.getString());
                                    break;
                            }
                        }
                    }
                }
            }
        }
    }
    

标签:Java,name,处理,add,born,JSON,var,occupation
From: https://www.cnblogs.com/tongsuper/p/17484952.html

相关文章

  • vue-element-admin 上传图片慢问题处理
    vue-element-admin自带上传图片组件,在使用的过程中发现上传速度很慢,尤其是上传一些大图需要耗时几十秒不能忍受。出现这种情况,是因为upload组件会将图片上传到action="https://httpbin.org/post" ,并返回转换成base64编码格式的数据。格式类似:data:image/jpeg;base64,/9j/4AAQS......
  • [ARM 汇编]进阶篇—异常处理与中断—2.4.1 异常处理概念
    异常处理简介在ARM汇编开发中,异常处理和中断是常见的概念,它们是对系统运行过程中出现的特殊情况进行处理的一种机制。异常处理和中断包括硬件异常、软件异常和外部中断等。当处理器遇到这些特殊情况时,它会自动执行相应的处理程序。异常和中断的分类复位(Reset):当处理器上电或复......
  • 将jar包中 *.class文件批量转成*.java文件
    (35条消息)如何将jar包转为java代码_jar包转成代码_七少丶的博客-CSDN博客https://blog.csdn.net/qq_16939219/article/details/121700754(35条消息)Java反编译工具Jad详解_jad反编译命令_爪哇星空的博客-CSDN博客https://blog.csdn.net/hing_ren/article/details/127430806 ......
  • springboot 中使用 redis 处理接口的幂等性
    什么是接口幂等性?数学中:在一次元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同;在二次元运算为幂等时,自己重复运算的结果等于它自己的元素。计算机学中:幂等指多次操作产生的影响只会跟一次执行的结果相同,通俗的说:某个行为重复的执行,最终获取的结果是相同的,不会因......
  • 自然语言处理技术在自然语言生成中的应用
    目录标题:《11.《自然语言处理技术在自然语言生成中的应用》》背景介绍自然语言处理技术(NLP)是一种人工智能技术,旨在使计算机理解和生成自然语言。NLP技术可以用于许多不同的应用场景,如机器翻译、文本摘要、情感分析、语音识别等。在自然语言生成方面,NLP技术可以用于生成自......
  • javaScript语言学习指南
    简介关于JavaScript的入门学习教程,网上通常会推荐以下书籍:《JavaScript权威指南》(其中涵盖语言核心部分和浏览器客户端编程,比较系统和全面,个人比较推荐,电子版下载(中文版),英文版)《JavaScript高级程序设计》(作为参考书与《JavaScript权威指南》一起参考阅读还不错,电子版下载)《......
  • vue时间处理
    vue时间处理https://blog.csdn.net/xc9711/article/details/123347629前言记录vue对时间的处理String与时间戳、时间互转计算时间差设置时间格式:YYYY-MM-DDHH:mm:ss年月日时分秒形式以及HH:mm:ss时分秒形式时间说明在此申明以下使用的时间相关的属性startTime:......
  • Java并发(十)----线程之守护线程
    默认情况下,Java进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程,只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。例:log.debug("开始运行...");Threadt1=newThread(()->{  log.debug("开始运行...");  sleep(2......
  • Java并发(十一)----线程五种状态与六种状态
    1、五种状态这是从操作系统层面来描述的【初始状态】仅是在语言层面创建了线程对象,还未与操作系统线程关联【可运行状态】(就绪状态)指该线程已经被创建(与操作系统线程关联),可以由CPU调度执行【运行状态】指获取了CPU时间片运行中的状态当CPU时间片用完,会从【......
  • ActiveMQ InactivityIOException: Channel was inactive for too (>30000) long 处理
    生产服务器上,MQProduce和consumer端同时报如下错误,导致不能正常工作。Transport(tcp://132.97.122.168:61616)failed,reason:org.apache.activemq.transport.InactivityIOException:Channelwasinactivefortoo(>30000)long:tcp://132.97.122.168:61616,attemptingt......