19.JAVA-从文件中解析json、并写入Json文件(详解)
1.json介绍
json与xml相比, 对数据的描述性比XML较差,但是数据体积小,传递速度更快.
json数据的书写格式是"名称:值对",比如:
"Name" : "John" //name为名称,值对为"john"字符串
值对类型共分为:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号[]中)
- 对象(在花括号{}中)
- null
当然数组也可以包含多对象:
{
"employees": [
{ "Name":"John" , "Age":19 },
{ "Name":"Anna" , "Age":22 },
{ "Name":"Peter", "Age":23 }
]
}
表示"employees"对象中有3个对象数组(每个对象数组表示一条员工信息),其中并列的数据都必须用逗号","隔开.
2.json包使用
在www.json.org上公布了很多JAVA下的json解析工具(还有C/C++等等相关的),其中org.json和json-lib比较简单,两者使用上差不多,这里我们使用org.json,org.json下载地址为: https://search.maven.org/search?q=g:org.json%20AND%20a:json&core=gav
3.json解析
3.1解析步骤
- 首先通过new JSONObject(String)来构造一个json对象,并将json字符串传递进来.
- 然后通过getXXX(String key)方法去获取对应的值.
3.2 example.json示例文件如下:
{
"FLAG": ,
"NAME": "example",
"ARRAYS":
[
{
"Name": "array1",
"String": "哈哈哒1"
},
{
"Name": "array2",
"String": "哈哈哒2"
},
{
"Name": "array3",
"String": "哈哈哒3"
},
{
"Name": "array4",
"String": "哈哈哒4"
}
]
}
3.3解析代码如下:
@Test public void JsonParser() throws Exception{ char cbuf[] = new char[];
InputStreamReader input =new InputStreamReader(new FileInputStream(new File("src//example.json")),"UTF-8");
int len =input.read(cbuf);
String text =new String(cbuf,,len);
//1.构造一个json对象
JSONObject obj = new JSONObject(text.substring(text.indexOf("{"))); //过滤读出的utf-8前三个标签字节,从{开始读取 //2.通过getXXX(String key)方法获取对应的值
System.out.println("FLAG:"+obj.getString("FLAG"));
System.out.println("NAME:"+obj.getString("NAME")); //获取数组
JSONArray arr = obj.getJSONArray("ARRAYS");
System.out.println("数组长度:"+arr.length());
for(int i=;i<arr.length();i++)
{
JSONObject subObj = arr.getJSONObject(i);
System.out.println("数组Name:"+subObj.getString("Name")+" String:"+subObj.getString("String"));
} }
打印如下:
4.写json文件
4.1写json步骤
- 首先通过new JSONObject()来构造一个空的json对象
- 如果要写单对象内容,则通过JSONObject .put(key,value)来写入
- 如果要写多数组对象内容,则通过JSONObject .accumulate (key,value)来写入
- 最后通过JSONObject .toString()把数据导入到文件中.
4.2写示例如下:
@Test
public void JsonWrite() throws Exception{ OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("exampleWrite.json"),"UTF-8"); JSONObject obj=new JSONObject();//创建JSONObject对象 obj.put("FLAG","");for(Integer i=;i<;i++)
{
JSONObject subObj=new JSONObject();//创建对象数组里的子对象
subObj.put("Name","array"+i);
subObj.put("String","小白"+i);
obj.accumulate("ARRAYS",subObj);
}
System.out.println(obj.toString()); osw.write(obj.toString());
osw.flush();//清空缓冲区,强制输出数据
osw.close();//关闭输出流
}
打印如下:
19.JAVA-从文件中解析json、并写入Json文件(详解)的更多相关文章
- jmeter 参数值写入到指定的文件中[如获取token写入某文件为免登录备用]
1.编写java 类AppendFile ,代码如下 import java.io.File;import java.io.FileWriter;import java.io.IOException; ...
- scanf从文件中读入,printf写入到文件
重定向方式读写文件 #include <stdio.h> #define LOCAL int main() { #ifdef LOCAL freopen("input.txt&q ...
- IDEA 之 ERROR:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
问题描述:在使用IDEA对JSTL进行测试时出现error:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core] ...
- java算法面试题:编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。
package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...
- 将对象以json格式写入到文件中
将 list 对象以json格式写入到文件中 try { ObjectMapper mapper = new ObjectMapper(); String value = mapper.writeVa ...
- Effective Objective-C 2.0 — 第二条:类的头文件中尽量少引入其他头文件
第二条:类的头文件中尽量少引入其他头文件 使用向前声明(forward declaring) @class EOCEmployer 1, 将引入头文件的实际尽量延后,只在确有需要时才引入,这样就可以减 ...
- python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件
python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...
- 将一个文件中的内容,在另一个文件中生成. for line in f1, \n f2.write(line)
将一个文件中的内容,在另一个文件中生成. 核心语句: for line in f1: f1中的所有一行 f2.write(line) ...
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
提高Java代码质量的Eclipse插件之Checkstyle的使用详解 CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具.它能够自动化代 ...
- java 日志体系(三)log4j从入门到详解
java 日志体系(三)log4j从入门到详解 一.Log4j 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...
随机推荐
- Kubernetes(k8s)集群安装
一:简介 二:基础环境安装 1.系统环境 os Role ip Memory Centos 7 master01 192.168.25.30 4G Centos 7 node01 192.168.25 ...
- 银联ISO8583报文解析过程
主密钥: aabbccddeeff11223344556677889900 1.从签到报文中获取工作密钥,包括MACKEY明文,PINKEY明文 签到: 12-03-31 16:38:09----&g ...
- Electron 菜单切换主题与css替换 ts编写
////目标css<link rel="stylesheet" id="theme_css" href="路径"> ////ts ...
- 手把手教你用netty撸一个ZkClient
原文地址: https://juejin.im/post/5dd296c0e51d4508182449a6 前言 有这个想法的缘由是前一阵子突发奇想, 想尝试能不能直接利用js连接到zookeeper ...
- PHP 提交复选框数据
PHP 提交复选框数据 前台,name要加 []: <input type="checkbox" name="cate[]" value="ca ...
- pat 1084 Broken Keyboard(20 分)
1084 Broken Keyboard(20 分) On a broken keyboard, some of the keys are worn out. So when you type som ...
- 领扣(LeetCode)对称二叉树 个人题解
给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,nul ...
- 四 linuk常用命令 2. 权限管理命令
一 权限管理命令chmod 所有者u 所属组g 其他人o 所有人a 所有者和root超级用户可以更改该权限 普通更改权限是不会改变子目录的权限的,要想改变用递归修改 useradd增加用户 目录的r和 ...
- flex一些属性
// 改变主轴的方向 flex-direction: column; // display:flex的子元素无法设置宽度 // 子元素有个flex-shrink属性,表示在父元素宽度不够的情况下是否自 ...
- BloomFilter在Hudi中的应用
Bloom Filter在Hudi中的应用 介绍 Bloom Filter可以用于检索一个元素是否在一个集合中.它的优点是空间效率和查询时间都远远超过一般的算法,主要缺点是存在一定的误判率:当其判断元 ...