博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Java IO]06_JSON操作
阅读量:6435 次
发布时间:2019-06-23

本文共 3131 字,大约阅读时间需要 10 分钟。

6.1 JSON 知识背景

6.1.1 JSON 简介

JSON: JavaScript Object Notation(JavaScript 对象表示法)

JSON 是存储和交换文本信息的语法。类似 XML

JSON XML 更小、更快,更易解析。

JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHPJSP.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种操作JSONjar包,这里介绍一个最常见的jar包:json-lib

6.2.1 Jar包下载

下载地址:

 

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,可以写入文件;

JSONStringerJSONWriter的子类;

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 

转载地址:http://noqga.baihongyu.com/

你可能感兴趣的文章
iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)
查看>>
GraphQL入门2
查看>>
照片与本人严重不符
查看>>
编码(2)从字节理解Unicode(UTF8/UTF16)
查看>>
(轉貼) Jolt 2007得獎名單 (News) (.NET)
查看>>
Left 4 Dead升级补丁总汇(3663-3986)
查看>>
Jlink无法识别CPU/lpc2103/lpc2131
查看>>
GridView里面嵌套RadioButton
查看>>
纯css制作带三角(兼容所有浏览器)
查看>>
『原创』+『参考』使用C#在PPC的Today界面上的任务栏加入应用程序图标
查看>>
短期目标[Till 2011-08-05]
查看>>
Linux内核配置(二) :CPU类型配置
查看>>
自动化测试工程师应聘要求
查看>>
记不住ASP.NET页面生命周期的苦恼
查看>>
[置顶] mkdir函数-linux
查看>>
android天气查询(一)websevice之ksoap2软件包的使用
查看>>
Python打印格式化与字符串
查看>>
431.chapter10. working with flat files
查看>>
ArcGIS特殊标注效果的简单实现
查看>>
我的ASP.NET AJAX控件——PopupNotificationExtender:实现OWA或Messenger样式的信息提示窗口...
查看>>