[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 库支持许多不同的编程语言。 目前非常多的动态(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包下载

下载地址: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,可以写入文件;

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.cnblogs.com/jingmoxukong/p/4664224.html,如需转载请自行联系原作者

相关文章
|
13小时前
|
XML 前端开发 Oracle
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
8 2
|
1天前
|
存储 Java
java IO接口(Input)用法
【5月更文挑战第1天】Java的`java.io`包包含多种输入输出类。此示例展示了如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着创建一个字节数组存储读取的数据,调用`read()`方法将文件内容填充至数组。然后将字节数组转换为字符串并打印,最后关闭输入流。注意,`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
7 2
|
2天前
|
存储 NoSQL 安全
java 中通过 Lettuce 来操作 Redis
java 中通过 Lettuce 来操作 Redis
java 中通过 Lettuce 来操作 Redis
|
2天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
15 0
|
2天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
【4月更文挑战第28天】本文简要介绍了自动化测试的实战应用,通过一个在线问卷调查(&lt;https://www.sojump.com/m/2792226.aspx/&gt;)为例,展示了如何遍历并点击问卷中的选项。测试思路包括找到单选和多选按钮的共性以定位元素,然后使用for循环进行点击操作。代码设计方面,提供了Java+Selenium的示例代码,通过WebDriver实现自动答题。运行代码后,可以看到控制台输出和浏览器的相应动作。文章最后做了简单的小结,强调了本次实践是对之前单选多选操作的巩固。
11 0
|
3天前
|
分布式计算 DataWorks 监控
DataWorks操作报错合集之DataWorks在调用java sdk的createFile功能时报错com.aliyuncs.exceptions.ClientException: 1201111000 如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
9 1
|
3天前
|
存储 Java Linux
【Java EE】 文件IO的使用以及流操作
【Java EE】 文件IO的使用以及流操作
|
3天前
|
存储 前端开发 测试技术
《手把手教你》系列技巧篇(三十五)-java+ selenium自动化测试-单选和多选按钮操作-下篇(详解教程)
【4月更文挑战第27天】本文介绍了使用Java+Selenium进行Web自动化测试时,如何遍历和操作多选按钮的方法。文章分为两个部分,首先是一个本地HTML页面的示例,展示了多选按钮的HTML代码和页面效果,并详细解释了遍历多选按钮的思路:找到所有多选按钮的共同点,通过定位这些元素并放入list容器中,然后使用for循环遍历并操作。 第二部分介绍了在JQueryUI网站上的实战,给出了被测网址,展示了代码设计,同样使用了findElements()方法获取所有多选按钮并存储到list中,然后遍历并进行点击操作。最后,文章对整个过程进行了小结,并推荐了作者的其他自动化测试教程资源。
11 0
|
4天前
|
存储 Java 测试技术
Java基础IO总结(下)
Java基础IO总结(下)
10 0
|
4天前
|
存储 Java
Java基础IO总结(上)
Java基础IO总结(上)
10 0