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();//关闭输出流
}

打印如下:

最新文章

  1. forms6 builder安装之后设置注册表开发环境
  2. poj2482 Stars in Your Window
  3. Unity3D Script KeynoteII
  4. 【转载】java数据库操作
  5. WCF Rest Json
  6. setWillNotDraw和setFillViewport
  7. wikioi1369 xth 砍树
  8. YUI的类型判断函数
  9. 连接远程hbase长时间等待问题
  10. R语言数据分析系列六
  11. 【转】android中TextAppearanceSpan的使用
  12. java中equals方法和contentEquals方法区别
  13. Oracle杀死死锁进程
  14. qml demo分析(objectlistmodel-自定义qml数据)
  15. 图像检索(3):BoW实现
  16. 视频转码成mp4格式,添加关键帧,添加元数据,把元数据放在第一帧,可拖动
  17. 利用微信支付的订单查询接口可以在APP 中提高支付的可靠性
  18. Struts框架(6)---action接收请求参数
  19. log4j日志文件名与行号显示乱码? 问号? 参数问号? 日志问号?【转】【补】
  20. Android开发day-01

热门文章

  1. 部署https并自动续期
  2. 『题解』洛谷P2170 选学霸
  3. docker——数据卷volume:文件共享
  4. linux内核崩溃之kdump机制
  5. [NLP] Adaptive Softmax
  6. Linux内核版本 uname命令 GNU项目 Linux发行版
  7. MAC系统下,Jmeter5.1.1 无法录制问题
  8. 面试官:你连RESTful都不知道我怎么敢要你?
  9. javaScript——label语句
  10. 2019-9-25:渗透测试,基础学习,medusa爆破学习