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文件(详解)的更多相关文章

  1. jmeter 参数值写入到指定的文件中[如获取token写入某文件为免登录备用]

    1.编写java 类AppendFile ,代码如下 import java.io.File;import java.io.FileWriter;import java.io.IOException; ...

  2. scanf从文件中读入,printf写入到文件

    重定向方式读写文件 #include <stdio.h> #define LOCAL int main() { #ifdef LOCAL freopen("input.txt&q ...

  3. 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] ...

  4. 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 ...

  5. 将对象以json格式写入到文件中

    将 list 对象以json格式写入到文件中 try { ObjectMapper mapper = new ObjectMapper(); String value = mapper.writeVa ...

  6. Effective Objective-C 2.0 — 第二条:类的头文件中尽量少引入其他头文件

    第二条:类的头文件中尽量少引入其他头文件 使用向前声明(forward declaring) @class EOCEmployer 1, 将引入头文件的实际尽量延后,只在确有需要时才引入,这样就可以减 ...

  7. python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件

    python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...

  8. 将一个文件中的内容,在另一个文件中生成. for line in f1, \n f2.write(line)

    将一个文件中的内容,在另一个文件中生成. 核心语句: for line in f1: f1中的所有一行 f2.write(line)                                  ...

  9. 提高Java代码质量的Eclipse插件之Checkstyle的使用详解

    提高Java代码质量的Eclipse插件之Checkstyle的使用详解 CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具.它能够自动化代 ...

  10. java 日志体系(三)log4j从入门到详解

    java 日志体系(三)log4j从入门到详解 一.Log4j 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...

随机推荐

  1. Linux如何添加硬盘

    一.命令操作: df       #查看磁盘空间 fdisk     #分区/查看分区 mkfs      #格式化 df  -h(以人类易读) -m(以M为单位读取)            #查看硬 ...

  2. Python 基础 面向对象之二 三大特性

    Python 基础 面向对象之二 三大特性 上一篇主要介绍了Python中,面向对象的类和对象的定义及实例的简单应用,本篇继续接着上篇来谈,在这一篇中我们重点要谈及的内容有:Python 类的成员.成 ...

  3. 201871010114-李岩松《面向对象程序设计(java)》第一周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  4. 20190806-sed面试题

    由于比较难,附上PPT,没事还得看 下载:https://www.lanzous.com/i5cs9aj 密码:arka 1.删除centos7系统/etc/grub2.cfg⽂件中所有以空⽩开头的⾏ ...

  5. 关于html与css的标签及属性(text文本属性、背景background属性、表格标签table、列表、)

    text文本属性1.颜色 colorcolor:red: 2.文本缩进text-indant属性值 num+px text-indant:10px:3.文本修饰 text-decoration属性值: ...

  6. 利用Xshell配置ssh免密码登录虚拟机,进行虚拟机与物理机的传输

    先说一下 Xshell如何无密连接虚拟机: ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一种,这里介绍密钥认证方式登录到linux的方法.使用 ...

  7. Maven系列第8篇:你的maven项目构建太慢了,我实在看不下去,带你一起磨刀!!多数使用maven的人都经常想要的一种功能,但是大多数人都不知道如何使用!!!

    maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能. 这是maven系列第8篇. 整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部 ...

  8. hdu 2516 取石子游戏 (Fibonacci博弈)

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  9. 【译】利用Lombok消除重复代码

    当你在写Getter和Setter时,一定无数次的想过,为什么会有POJO这么烂的东西.你不是一个人!(不是骂人-)无数的开发人员花费了大量的时间来写这种样板代码,而他们本来可以利用这些时间做出更有价 ...

  10. MAC OS下编译apple跨平台的libevent库 (可延申到其它第三库)

    apple下的跨平台是指不同设备上的苹果系统以及同一系统在不同cpu体系的不同版本. 前面一篇介绍如何用ndk编译android跨平台的第三库,那样的方法却不能应用在apple上. 网上可以找到这么一 ...