fastjson(七)处理超大对象和超大JSON文本

2023-11-17

当需要处理超大JSON文本时,需要Stream API,在fastjson-1.1.32版本中开始提供Stream API。


来看一下示例代码:

示例对象:

package json.fastjson.StreamApi;

import java.util.HashMap;
import java.util.Map;

public class VO {
    private int id;
    private Map<String, Object> attributes = new HashMap<String, Object>();

    public VO(int id) {
        super();
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Map<String, Object> getAttributes() {
        return attributes;
    }

    @Override
    public String toString() {
        return "VO [id=" + id + ", attributes=" + attributes + "]";
    }
}

一、序列化

1.1、超大JSON数组序列化

如果你的JSON格式是一个巨大的JSON数组,有很多元素,则先调用startArray,然后挨个写入对象,然后调用endArray。

测试类:

package json.fastjson.StreamApi;

import java.io.FileWriter;
import java.io.IOException;

import com.alibaba.fastjson.JSONWriter;

public class TestHugeArraySerialize {

    public static void main(String[] args) throws IOException {
        JSONWriter writer = new JSONWriter(new FileWriter("hugeArray.json"));
        writer.startArray();
        for (int i = 0; i < 10; ++i) {
            writer.writeValue(new VO(i));
        }
        writer.endArray();
        writer.close();
    }

}

输出结果:

程序运行之后会产生一个文件:

这里写图片描述

文件内容:

[{"attributes":{},"id":0},{"attributes":{},"id":1},{"attributes":{},"id":2},{"attributes":{},"id":3},{"attributes":{},"id":4},{"attributes":{},"id":5},{"attributes":{},"id":6},{"attributes":{},"id":7},{"attributes":{},"id":8},{"attributes":{},"id":9}]
1.2、超大JSON对象序列化

如果你的JSON格式是一个巨大的JSONObject,有很多Key/Value对,则先调用startObject,然后挨个写入Key和Value,然后调用endObject。

测试类:

package json.fastjson.StreamApi;

import java.io.FileWriter;
import java.io.IOException;

import com.alibaba.fastjson.JSONWriter;

public class TestHugeObjectSerialize {

    public static void main(String[] args) throws IOException {

        JSONWriter writer = new JSONWriter(new FileWriter("hugeObject.json"));
        writer.startObject();
        for (int i = 0; i < 10; ++i) {
            writer.writeKey("x" + i);
            writer.writeValue(new VO(i));
        }
        writer.endObject();
        writer.close();
    }

}

输出结果:

程序运行之后会产生一个文件:

这里写图片描述

文件内容:

{"x0":{"attributes":{},"id":0},"x1":{"attributes":{},"id":1},"x2":{"attributes":{},"id":2},"x3":{"attributes":{},"id":3},"x4":{"attributes":{},"id":4},"x5":{"attributes":{},"id":5},"x6":{"attributes":{},"id":6},"x7":{"attributes":{},"id":7},"x8":{"attributes":{},"id":8},"x9":{"attributes":{},"id":9}}

二、反序列化

2.1、超大JSON数组反序列化

测试类:

package json.fastjson.StreamApi;

import java.io.FileReader;
import java.io.IOException;

import com.alibaba.fastjson.JSONReader;

public class TestHugeArrayDeserialize {

    public static void main(String[] args) throws IOException {
        // 读入上面输出的文件
        JSONReader reader = new JSONReader(new FileReader("hugeArray.json"));
        reader.startArray();
        while (reader.hasNext()) {
            VO vo = reader.readObject(VO.class);
            System.out.println(vo);
        }
        reader.endArray();
        reader.close();
    }

}

输出结果:

VO [id=0, attributes={}]
VO [id=1, attributes={}]
VO [id=2, attributes={}]
VO [id=3, attributes={}]
VO [id=4, attributes={}]
VO [id=5, attributes={}]
VO [id=6, attributes={}]
VO [id=7, attributes={}]
VO [id=8, attributes={}]
VO [id=9, attributes={}]
2.2、超大JSON对象反序列化

测试类:

package json.fastjson.StreamApi;

import java.io.FileReader;
import java.io.IOException;

import com.alibaba.fastjson.JSONReader;

public class TestHugeObjectDeserialize {

    public static void main(String[] args) throws IOException {
        // 读入上面输出的文件
        JSONReader reader = new JSONReader(new FileReader("hugeObject.json"));
        reader.startObject();
        while (reader.hasNext()) {
            String key = reader.readString();
            VO vo = reader.readObject(VO.class);
            System.out.println(key + ":" + vo);
        }
        reader.endObject();
        reader.close();
    }

}

输出结果:

x0VO [id=0, attributes={}]
x1VO [id=1, attributes={}]
x2VO [id=2, attributes={}]
x3VO [id=3, attributes={}]
x4VO [id=4, attributes={}]
x5VO [id=5, attributes={}]
x6VO [id=6, attributes={}]
x7VO [id=7, attributes={}]
x8VO [id=8, attributes={}]
x9VO [id=9, attributes={}]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fastjson(七)处理超大对象和超大JSON文本 的相关文章

  • 您可以使用 JSONP 检索您的 Skype 状态吗?

    有谁知道使用 JSONP 获取 Skype 状态的 URL 到目前为止我只找到了一个 XML 状态 URL http mystatus skype com username xml 我正在尝试使用 AJAX 查询 Skype 是的 我可以使
  • 使用Sed查找并替换json字段

    我有一组 json 文件 其中在最后一个键值对之后有需要替换的逗号 RepetitionTime 0 72 TaskName WM Manufacturer Siemens ManufacturerModelName Skyra Magne
  • “过滤”JSON 以获得唯一键并获取所有相关值

    找到一个组中所有可能的相关值的最佳方法是什么 var table group a stuff new group a stuff old group b stuff newOld group b stuff old group c stuf
  • 如何在notepad++中格式化JSON

    我想在记事本 中格式化JSON字符串 请指导我该怎么做 我研究了这个解决方案记事本 JSON 格式 https stackoverflow com questions 1560464 how to reformat json in note
  • 替换 JSON 中的转义字符

    我想用空格替换 JSON 字符串中的 字符 我怎样才能做到这一点 我发现从 JSON 字符串中删除所有转义字符的最简单 最好的方法是将字符串传递到正则表达式 Unescape 方法 此方法返回一个没有转义字符的新字符串 甚至删除了 n t
  • 将 JSON 转换为对象失败 - 无法将当前 JSON 对象反序列化为 System.Collections.Generic.List

    我正在使用 www textlocal in 的 API 它返回 JSON 格式的对象 JSON warnings message Number is in DND numbers 917000000000 balance 900 batc
  • wcf json网络服务

    创建 JSON Web 服务的最佳方法是什么 我们还有另一个使用 Java 的团队 他们坚持使用 JSON 完成所有通信 我更喜欢使用 WCF 而不是任何第三方框架 我找到了这个博客 http www west wind com weblo
  • 使用 XPath 3.1 fn:serialize 进行 JSON 序列化

    我在 Saxon HE 9 8 中使用 XSLT 3 0 并且希望将 JSON 文档用作链接数据JSON LD https json ld org 在 JSON LD 中 完整的 HTTP URI 通常显示为值 当我使用 XPath 3 1
  • 从 JSON 数组创建标记 php mySQL Google Maps v2 android

    我正在尝试从 mySQL 数据库在 Google Maps v2 上创建标记 但它不起作用 地图确实出现了 但没有标记 谁能告诉我出了什么问题以及我需要改变什么 我也尝试过让 getDouble 为 getDouble 0 和 getDou
  • 字符串化 JavaScript 对象

    我正在寻找字符串化一个对象 我想要这样的输出 1 valeur dalebrun usager experttasp date 2013 08 20 16 41 50 2 valeur test usager experttasp date
  • jq - 按值排序

    我有以下结构 ID XX guid 1 ID YY guid 2 我尝试过运行 jq sort by guid conn json 但是我收到一个错误 Cannot index string with string guid 请您告诉我如何
  • Foreach Ajax Json - Jquery

    谁能帮我 我有一个数组 stars Chris Pine Keira Knightley Kevin Costner 我想做的是 foreach star 我想将输入附加到 div 和 foreach star 它们在输入中具有值 这就是我
  • 如何使用重复的键动态生成 JSON 对象?

    我知道这听起来不可能 但我的老板告诉我 我必须使用 jQuery 通过 AJAX 后调用发送 JSON 并且必须具有重复的键 问题是 如果我写这样的东西 post someurl key1 value1 key2 value2 key2 v
  • 使用把手显示来自 parse.com 的 json 响应

    我想将 json 响应传递给车把 我已经查看了解析文档和 stackoverflow 问题 但我似乎无法弄清楚这一点 这是回应 results address 755 W Yale createdAt 2013 02 09T01 12 15
  • 使用 Spring / JPA 写入 Postgres 数据库的 JSON 列

    我有一个名为 test 的表 其中包含 Postgres 9 3 中 json 类型的列 sample column 我正在尝试使用 Spring JPA 将以下内容写入列中 name 更新的名称 我在其他帖子中读到 我需要添加自定义转换器
  • 检查 JSON 模式中不同的嵌套属性

    有没有办法在嵌套 JSON 模式中实现相当于 CHECK 约束的 Postgres 假设我们有具有两个属性的数据 每个属性都有嵌套属性 JSON Schema 如何使第一个对象所需的内容依赖于第二个对象 我的真实案例场景是为 GeoJSON
  • OSError: [Errno 22] 当我尝试 .read() json 文件时

    我只是想用 Python 读取我的 json 文件 当我这样做时 我位于正确的文件夹中 我在 下载 中 我的文件名为 Books 5 json 但是 当我尝试使用 read 函数时 出现错误 OSError Errno 22 Invalid
  • JsonCpp - 当有 json::Value 对象时,我如何知道它的键名称?

    假设我有这个 Json 文件 id 0 使用 jsoncpp 我可以有一个Json Value通过这样做来对象 Json Value node root 0u id 好的 在代码的其他地方 我明白了node对象 我想从中获取一些信息 我可以
  • 在android中从JSON生成listview

    我对 Android 完全陌生 目前正在尝试从从我的服务器中提取的 JSON 数组生成列表视图 我已经阅读了很多教程 但没有运气 有一种独特的方法可以做到这一点 请您指出一些适合开始的资源 我读过了this http www josecgo
  • 我如何在 C# .NET(win7 手机)中使用“DataContractJsonSerializer”读入“嵌套”Json 文件?

    我有一个问题 如果我的 json 文件看起来像这样 Numbers 45387 Words 空间桶 我可以很好地阅读它 但是如果它看起来像这样 Main Numbers 45387 Words 空间桶 某事 数字 12345 单词 克兰斯基

随机推荐

  • Unity泛光效果消失问题

    关于Unity泛光效果消失问题解决过程 问题描述 第一次尝试解决 第二次尝试解决 第三次尝试解决 问题描述 之前一直在做的一个项目 在一次想要添加UI泛光效果失败后 发现项目中已有的泛光效果也消失了 第一次尝试解决 因为问题是在添加插件Po
  • linux服务器编译报错:DSO missing from command line原因及解决办法

    报错信息提示包含以下两行 undefined reference to symbol libfastrtps so 1 error adding symbols DSO missing from command line 原因 提示说符号没
  • SpringMVC异常处理

    为了统一处理代码运行过程中出现的异常 给用户一个更友好的异常界面 需要引入springMVC的异常处理功能 为了演示这个功能 本文实现一个比较常用的需求 将所有的异常归为两类 一类是程序员自己创建的异常类 另一类是系统或框架定义的异常类 程
  • junit如何测试没有返回值的方法

    方法里总有些操作 只要测试结果对就可以了 没有必要说非要有返回值 马士兵
  • 深入理解 SQL 中的 Grouping Sets 语句

    前言 SQL 中 Group By 语句大家都很熟悉 根据指定的规则对数据进行分组 常常和聚合函数一起使用 比如 考虑有表 dealer 表中数据如下 id Int city String car model String quantity
  • Linux系统下ping命令报错 name or service not know

    问题描述 CentOS 但是当执行ping命令的时候 提示name or service not known 解决方法 1 添加DNS服务器 1 vi etc resolv conf 进入编辑模式 增加如下两行内容 分别是首选DNS服务器和
  • logback--进阶--05--自定义Appenders

    logback 进阶 05 自定义Appenders 代码位置 https gitee com DanShenGuiZu learnDemo tree master logback learn 1 介绍 1 1 继承关系图 可以看到Appe
  • C++ 多态和虚函数

    一 先搞清override overload overwrite的区别 1 overload 重载 不是多态 在C 程序中 可以将语义 功能相似的几个函数用同一个名字表示 但参数不同 包括类型 顺序不同 即函数重载 1 相同的范围 在同一个
  • 药明康德成都研发中心投入运营;中国白酒行业净利润将迎来七年来首次下滑

    今日看点 药明康德成都研发中心正式投入运营 该研发中心将成为药明康德上海研发总部以外 又一个覆盖化学及生物学的新药发现整体研发平台 将为客户提供从小分子药物设计 合成 分析 体内体外生物学 肿瘤免疫学等全方位 一体化的新药研发服务 该研发中
  • 【编译原理】LR(1)分析方法(c++实现)

    前文回顾 编译原理 LR 0 分析方法 c 实现 编译原理 SLR 1 分析方法 c 实现 算法 来自龙书第二版 代码 和SLR的区别其实只是DFA中多了一个搜索符 构建分析表的时候规约项的列是相应的搜索符而已 代码基本上就在SLR的代码上
  • 拼多多anti_content算法

    最近拼多多的anti content算法更新了 闲着无聊就看了看 总思路如下 首先我们抓包 看到我们今天的目标 anti content 现在 我们通过堆栈入口随便下个断点 然后我们在CallStack中向下寻找 经过漫长的寻找 我们可以在
  • route命令的详细使用介绍

    1 命令格式 route f p Command Destination mask Netmask Gateway metric Metric if Interface 2 命令功能 Route命令是用于操作基于内核ip路由表 它的主要作用
  • es单机数据迁移到另一个es单机

    将一个Elasticsearch单机的数据迁移到另一个Elasticsearch单机主要可以分为两步 第一步 备份原有数据 将原有Elasticsearch单机中的数据备份到一个文件中 可以使用 Elasticsearch 提供的 snap
  • 第三十讲:神州路由器路由重分发配置

    RIP和OSPF协议是目前应用最广泛的路由协议 两种协议交接的场合也很多见 两种协议的重分布是比较常见的配置 主校区原来所采用的网络协议为OSPF 而分校区采用的路由协议是RIP 采用RIP和OSPF重分发技术可以解决此问题 实验拓扑图如下
  • PostgreSQL、Greenplum 日常监控 和 维护任务

    背景 Greenplum的日常监控点 评判标准 日常维护任务 展示图层 由于一台主机可能跑多个实例 建议分层展示 另外 即使是ON ECS虚拟机 一个虚拟机一个实例一对一的形态 的产品形态 实际上也建议分层展示 以示通用性 主机级图层 1
  • vue项目全局内引入外部CDN地址的js文件

    通过vue cli 构建的vue项目的根目录下 有一个index html文件 例如
  • 跳过selenium检测爬取淘宝直通车

    最近 有对阿里商家端进行一些数据爬取 这次爬取的是直通车人群溢价数据 发现对selenium的检测相当厉害 然而我的回答是 你强任你强 清风拂山岗 咱人工登录怕过谁 什么cokies user agent selenium检测 token
  • Android构建问题解决方案

    1 问题一 解决方法 在app下的build gradle中加上 packagingOptions exclude META INF DEPENDENCIES exclude META INF NOTICE exclude META INF
  • 怎么计算union和struct中字节数计算

    首先我的运行结果都是在64位系统的Xcode中运行的 然后 这个只是由于对于标准的位移量方法看得头疼 自己总结出来的 如果有错误或者不明欢迎留言 字节 一般成8位为一个字节 在Xcode中sizeof int 等于4 在这里也就采用int占
  • fastjson(七)处理超大对象和超大JSON文本

    当需要处理超大JSON文本时 需要Stream API 在fastjson 1 1 32版本中开始提供Stream API 来看一下示例代码 示例对象 package json fastjson StreamApi import java