[Java IO]05_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]05_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]06_JSON操作
6.1 JSON 知识背景 6.1.1 JSON 简介 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法.类似 ...
- java+++IO流操作
序:IO流的操作主要分为两种读和写.一方面:我们可以通过不加缓冲类字符流BufferedReader/Writer和字节流BufferedInputStream/OutputStream来进行简单的读 ...
- Java IO流操作 (II)
缓冲流 /* * BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符.数组和字符串的高效写入. * BufferedReader:从字符输入流中读取文本,缓冲各个字符, ...
随机推荐
- java 上传文件到七牛云中
import com.alibaba.fastjson.JSONObject;import com.qiniu.common.QiniuException;import com.qiniu.commo ...
- ASP.NET Learning Center---学习ASP.NET(1)
1,学习地址---微软官网 2,目标:学习Razor,以及建立Web应用. 3,https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor ...
- webApi前端ajax调用后端返回{"readyState":0,"status":0,"statusText":"error"}解决方案
var url = data.url, params = data.params, try_times = data.try_times , async = data.sync == 'false' ...
- Go并发模式代码示例
演讲稿:Go Concurrency Patterns Youtube视频 作者:Rob Pike 练习题目:谷歌搜索:一个虚拟框架 谷歌搜索1.0 PPT从43页开始:https://talks.g ...
- 第2章.数组和ArrayList
2.1 数组基本概念 数组是可索引的数据的集合.数组既可以是内置的类型,也可以是用户自定义的类型.事实上,把数组数据称为对象大概是最简便的方式.C#中数组实际上就是对象的本身,因为它们都源于Syste ...
- 【39】为什么使用卷积?(Why convolutions?)
为什么使用卷积?(Why convolutions?) 我们来分析一下卷积在神经网络中如此受用的原因,然后对如何整合这些卷积,如何通过一个标注过的训练集训练卷积神经网络做个简单概括.和只用全连接层相比 ...
- Page Object设计模式(二)——poium测试库
一.简介 poium是一个基于Selenium/appium的Page Object测试库,最大的特点是简化了Page层元素的定义. 项目地址:https://github.com/SeldomQA/ ...
- 清北学堂—2020.1提高储备营—Day 1 afternoon(二分、分治、贪心)
qbxt Day 1 afternoon --2020.1.17 济南 主讲:李佳实 目录一览 1.二分法 2.分治 3.贪心 总知识点:基础算法 一.二分法 (1)算法分析:二分法是一种暴力枚举的优 ...
- 用JavaScript设计和创建对象
通过在优锐课的java学习分享中,get很多学习新技能,分享给大家参考学习. 介绍 在阅读此分步指南之前,你可能需要关注面向对象编程的介绍. 以下步骤中包含的Java代码与该文章理论中使用的Book对 ...
- 嵊州D5T2 折纸 folding
折纸 folding [问题描述] 在非常紧张的 NOIP 考试中,有人喜欢啃指甲,有人喜欢转铅笔,有人喜欢撕 纸条,……而小 x 喜欢迷折纸. 现有一个 W * H 的矩形纸张,监考老师想知道,小 ...