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 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...
随机推荐
- 简单搭建DNS服务器——bind
1安装bind yum install -y bind bind-utils bind-chroot 2 修改配置文件 # grep '^[^#]' /etc/named.conf options { ...
- Project Euler 57: Square root convergents
五十七.平方根收敛(Square root convergents) 二的平方根可以表示为以下这个无穷连分数: \[ \sqrt 2 =1+ \frac 1 {2+ \frac 1 {2 +\frac ...
- 使用Topshelf组件 一步一步创建 Windows 服务
我们先来介绍一下使用它的好处,以下论述参考自其他大神. topshelf是创建windows服务的一种方式,相比原生实现ServiceBase.Install.Installer更为简单方便, 我们只 ...
- nyoj 117 求逆序数 (归并(merge)排序)
求逆序数 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中 ...
- Test Complete 的自动化测试 --- 计算器
Test Complete 的自动化测试 --- 计算器 ·PS:工具:Test Complete, OS: win XP, (win10 不支持该工具的自动化测试) ·该篇博客将会讲1.如何录制 ...
- DAL
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;u ...
- zip的压缩和解压命令
以下命令均在/home目录下操作cd /home #进入/home目录 1.把/home目录下面的data目录压缩为data.zip zip -r data.zip data #压缩data目录 ...
- js数组和集合互转
js数组和集合互转可用于去重: 数组转集合 var arr = [55, 44, 65]; var set = new Set(arr); console.log(set.size === arr ...
- Install zabbix
- name: Create dir to keep install file file: path=/opt/pacheage state=directory follow=yes force=ye ...
- PostGIS 结合Openlayers以及Geoserver实现最短路径分析(一)
环境: Win10 ArcMap10.4(用于数据处理) postgresql9.4 postgis2.2.3 pgRouting2.3(postgresql插件) ##附上本文配套素材下载地址:ht ...