[Java IO]06_JSON操作
6.1 JSON 知识背景
6.1.1 JSON 简介
JSON: JavaScript Object Notation(JavaScript 对象表示法)
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。
JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
6.1.2 JSON 语法
JSON 语法规则
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON 名称/值对
JSON 数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
|
“name” : “zhangsan” |
这很容易理解,等价于这条 JavaScript 语句:
|
Name = “zhangsan” |
JSON 值类型
JSON 值可以是:
- 字符串(在双引号中)
- 数字(整数或浮点数)
- 对象(在花括号中)
- 数组(在方括号中)
- 逻辑值(true 或 false)
- Null
值的数据类型图:

6.1.3 JSON 的数据结构
JSON有两种数据结构:对象和数组。
JSON 对象
对象是一个无序的“‘名称/值’对”集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
JSON 对象在花括号中书写:
|
{ "name":"zhangsan" , "age":24 } |
这一点也容易理解,与这条 JavaScript 语句等价:
|
name = "zhangsan" age = 24 |
参考图如下:

JSON 数组
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
JSON 数组在方括号中书写:
数组可包含多个对象:
|
{ "people": [ { "namr":"zhangsan" , "age":22 }, { "name":"lisi" , "age":24 }, { "name":"wangwu" , "age":27 } ] } |
在上面的例子中,对象 "employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。
参考图如下:

6.2 Java 中操作 JSON 数据
网上有很多JAVA种操作JSON的jar包,这里介绍一个最常见的jar包:json-lib。
6.2.1 Jar包下载
下载地址:http://json-lib.sourceforge.net/
6.2.2 基本方法
普通数据转 JSONObject
/**
* 普通数据转 JSON
*/
public static void JsonTest1() {
JSONObject normalJson = new JSONObject();
normalJson.put("name", "zhangsan");
normalJson.put("sex", "男");
normalJson.put("age", new Integer(22));
System.out.println(normalJson.toString());
}
Map数据转 JSON
/**
* Map数据转 JSON
*/
public static void JsonTest2() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "zhangsan"); // string 类型
map.put("age", new Integer(22)); // number 类型
Object obj = new String("params");
map.put("obj", obj); // Object 类型
map.put("array", new String[] { "a", "b", "c" }); // array 类型
map.put("b_true", Boolean.TRUE); // boolean 类型
map.put("b_false", Boolean.FALSE); // boolean 类型
JSONObject json = JSONObject.fromObject(map);
System.out.println(json.toString());
}
List 数据转 JSON
/**
* List数据转 JSON
*/
public static void JsonTest3() {
List<String> list = new ArrayList<String>();
list.add("first");
list.add("second");
JSONArray jsonArray = JSONArray.fromObject(list);
System.out.print(jsonArray);
}
数组数据转 JSON
/**
* 数组数据转 JSON
*/
public static void JsonTest4() {
String[] colors = new String[]{ "red", "yellow", "blue" };
JSONArray jsonArray = JSONArray.fromObject(colors);
System.out.println(jsonArray);
}
构建 JSON 文本
JSONStringer可以用来快速构建一个JSON格式的文本,并转换成String,可以写入文件;
JSONStringer是JSONWriter的子类;
JSONStringer一般通过object().key().value().key().value().endObject()进行构造;
object() 表明开始一个对象,即添加'{';
endObject() 表明结束一个对象,即添加'}';
array() 表明开始一个数组,即添加一个'[';
endArray() 表明结束一个数组,即添加一个']';
key() 表示添加一个key;
value() 表示添加一个value;
/**
* 构建 JSON 文本
*/
public static void JsonTest5() {
JSONStringer stringer = new JSONStringer();
String str = stringer.object().key("product").value("phone").key("num").value(20).endObject().toString();
System.out.println(str);
}
参考资料
http://www.json.org/
http://www.runoob.com/json/json-tutorial.html
[Java IO]06_JSON操作的更多相关文章
- Java IO流操作汇总: inputStream 和 outputStream【转】
我们在进行Android java 开发的时候,经常会遇到各种IO流操作.IO流操作一般分为两类:字符流和字节流.以“Reader”结尾都是字符流,操作的都是字符型的数据:以“Stream”结尾的都是 ...
- Java IO流操作 (I)
1.FileWriter 写数据---输出流---由控制台向文件中写数据 import java.io.FileWriter; import java.io.IOException; /* * 写数据 ...
- java IO基础操作
java IO基础,通熟易懂,好久没复习java 基础了.这里是传送门... http://www.cnblogs.com/nerxious/archive/2012/12/15/2818848.ht ...
- java io 文件操作
package com.svse; import java.io.File; import java.io.IOException; public class IOTest { public stat ...
- Java IO流操作(III)——File类&案例一:输出制定目录下所有java文件名(包含子目录)&案例二:删除指定的目录(包含子目录)
1. File常用的构造 File file = new File("字符串路径"); File f = new File("D:\\a\\b.txt"); F ...
- java IO文件操作简单基础入门例子,IO流其实没那么难
IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 ...
- java+++IO流操作
序:IO流的操作主要分为两种读和写.一方面:我们可以通过不加缓冲类字符流BufferedReader/Writer和字节流BufferedInputStream/OutputStream来进行简单的读 ...
- [Java IO]05_JSON操作
目录 6.1 JSON 知识背景 6.1.1 JSON 简介 6.1.2 JSON 语法 6.1.3 JSON 的数据结构6.2 Java 中操作 JSON 数据 6.2.1 Jar包下载 ...
- Java IO流操作 (II)
缓冲流 /* * BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符.数组和字符串的高效写入. * BufferedReader:从字符输入流中读取文本,缓冲各个字符, ...
随机推荐
- Hbuilder开发HTML5 APP之向导页制作
研究了下,向导页的制作还是比较简单的,主要使用的是mui控件中的”图片轮播“组件,组件的标签写法手册中有,中间发现个有趣的东西,如果要作全屏,可以加个样式mui-fullscreen 滑动图片时会自动 ...
- Hadoop 2.6.0 Namenode HA,ResourceManager HA
先启动所有的zookeeper zkServer.sh start 在所有节点上启动JournalNode: sbin/hadoop-daemon.sh start journalnode 格式化第一 ...
- ASP.NET Core 数据保护(Data Protection)【上】
前言 上一篇博客记录了如何在 Kestrel 中使用 HTTPS(SSL), 也是我们目前项目中实际使用到的. 数据安全往往是开发人员很容易忽略的一个部分,包括我自己.近两年业内也出现了很多因为安全问 ...
- 解读ASP.NET 5 & MVC6系列
本系列的大部分内容来自于微软源码的阅读和网络,大部分测试代码都是基于VS RC版本进行测试的. 解读ASP.NET 5 & MVC6系列(1):ASP.NET 5简介 解读ASP.NET 5 ...
- Go项目结构和模块导入
Go项目结构和模块导入 golang项目结构与其他语言类似,但是仍然有一些需要注意的地方. 项目结构 环境配置 go 命令依赖一个重要的环境变量:$GOPATH,它表示GO项目的路径,如下设置 exp ...
- ASP.NET Web API的Controller是如何被创建的?
Web API调用请求的目标是定义在某个HttpController类型中的某个Action方法,所以消息处理管道最终需要激活目标HttpController对象.调用请求的URI会携带目标HttpC ...
- Win8换成Win7系统问题小结(修改主板BIOS方法)
问题描述: 笔记本电脑W8系统使用不习惯,想要换成W7系统,但不管是用光盘安装亦或是用U盘安装,在设置系统启动项的时候,选择从光盘启动或从U盘启动,但是回车点了之后没反应. 下面就说说问题的原因及解决 ...
- Android开发学习之路-LruCache使用和源码分析
LruCache的Lru指的是LeastRecentlyUsed,也就是近期最少使用算法.也就是说,当我们进行缓存的时候,如果缓存满了,会先淘汰使用的最少的缓存对象. 为什么要用LruCache?其实 ...
- Android笔记——SQLiteOpenHelper类
public 抽象类 SQLiteOpenHelper 继承关系 Java.lang.Object android.database.sqlite.SQLiteOpenHelper 类概要 这是一个辅 ...
- Leetcode-24 Swap Nodes in Pairs
#24. Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For ...