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操作的更多相关文章

  1. Java IO流操作汇总: inputStream 和 outputStream【转】

    我们在进行Android java 开发的时候,经常会遇到各种IO流操作.IO流操作一般分为两类:字符流和字节流.以“Reader”结尾都是字符流,操作的都是字符型的数据:以“Stream”结尾的都是 ...

  2. Java IO流操作 (I)

    1.FileWriter 写数据---输出流---由控制台向文件中写数据 import java.io.FileWriter; import java.io.IOException; /* * 写数据 ...

  3. java IO基础操作

    java IO基础,通熟易懂,好久没复习java 基础了.这里是传送门... http://www.cnblogs.com/nerxious/archive/2012/12/15/2818848.ht ...

  4. java io 文件操作

    package com.svse; import java.io.File; import java.io.IOException; public class IOTest { public stat ...

  5. Java IO流操作(III)——File类&案例一:输出制定目录下所有java文件名(包含子目录)&案例二:删除指定的目录(包含子目录)

    1. File常用的构造 File file = new File("字符串路径"); File f = new File("D:\\a\\b.txt"); F ...

  6. java IO文件操作简单基础入门例子,IO流其实没那么难

    IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 ...

  7. java+++IO流操作

    序:IO流的操作主要分为两种读和写.一方面:我们可以通过不加缓冲类字符流BufferedReader/Writer和字节流BufferedInputStream/OutputStream来进行简单的读 ...

  8. [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包下载   ...

  9. Java IO流操作 (II)

    缓冲流 /* * BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符.数组和字符串的高效写入. * BufferedReader:从字符输入流中读取文本,缓冲各个字符, ...

随机推荐

  1. C语言系统时间读取

    1 读出系统时间(每隔一秒)#include#includeint main(){  while(1) {    time_t t;    t= time(0); struct tm *p;     ...

  2. 简单的ATM取款过程

    一个简单的ATM的取款过程是这样的:首先提示用户输入密码(pwd),最多只能输3次,超过三次则提示用户“密码已输入三次错误,请取卡.“结束交易.如果用户密码正确,在提示用户输入金额(money),AT ...

  3. sublime text 如何新建,删除,重命名等问文件的快速操作

    引用自: stackoverflow 可以使用插件, Sidebar Enhancements, 按ctrl+shift+p 输入install package回车 搜索该插件后即可完成

  4. XMPP iOS客户端实现三:登录、注册

    1.创建一个单例模式来管理xmpp的连接和操作 +(XMPPManager *)share { static XMPPManager *_share=nil; static dispatch_once ...

  5. 基于OWin的Web服务器Katana发布版本3

    当 ASP.NET 首次在 2002 年发布时,时代有所不同. 那时,Internet 仍处于起步阶段,大约有 5.69 亿用户,每个用户平均每天访问 Internet 的时间为 46 分钟,大约有 ...

  6. 一步步学习javascript基础篇(4):面向对象设计之创建对象(工厂、原型和构造函数等模式)

    前面我们介绍了可以通过Object构造函数或对象字面量都可以用来创建单个对象,但是如果需要创建多个对象的话,显然很多冗余代码. 接下来介绍几种模式来创建对象.不过在此之前,我们还是先来了解下 type ...

  7. Javascript本质第二篇:执行上下文

    在上一篇文章<Javascript本质第一篇:核心概念>中,对Javascript执行上下文做了解释,但是这些都是基于Javascript标准中对执行上下文的定义,也就是说理论上的东西,本 ...

  8. 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...

  9. linux java so 历险

    一开始 -bash-4.1# java -cp "/usr/linkapp/bin/tomcat-master/webapps/ROOT/WEB-INF/lib/*":" ...

  10. bootstrap-popover的配置与灵活应用

    首先罗列一下配置参数: 1.animation true/false 是否动画 2.placement 'right'/'left'/top/bottom/function(){return 'rig ...