XML 格式数据极其的冗长。因为每个离散的数据片段需要大量的 XML 结构,所有有效 的数据的比例非常低。XML 语法还有轻微的模糊。还有,解析 XML 是非常占程序员的精力的。你需要提前了解详细的结构和确切地知道如何解开这个结构,然后细心地将他们写入 js 对象中。JSON 是一种轻量级易与解析的数据格式,它按照 js 的对象和数组的字面量格式来书写。 现在 JSON 的光环已经逐渐超越了 XML,各大网站提供的数据接口一般都是 JSON。

jquery 1.4 以后对 json 格式变严格了,也就是说必须要这种格式的{"键":"值","键":"值 "};像原来的{键:值,键:值}和{'键':'值','键':'值'}这种都是错误的,不合标准,所以 jquery 返回 error 如"{\"success\":true,\"msg\":\"success\"}",如果说是boolean 类型,则不用加 引号,其它的键/值都需要加引号。

什么是JSON?

JSON:JavaScript 对象表示法(JavaScript Object Notation), 一种轻量级的数据交换格式, 易于人阅读和编写, 也易于机器解析和生成。用来描述数据结构,它是基于纯文本的数据格式,是一种轻量级的数据交换格式。广泛应用于服务端与客户端的数据交互。JSON 是存储和交换文本信息的语法,类似 XML。JSON 采用完全独立于语言的文本格式,也使用了类似于 C 语言家族的习惯(包括 C, C++, C#, Java, JavaScript, Perl, Python…)这些特性使 JSON 成为理想的数据交换语言。JSON 是一个新的人类可读( human readable)的数据格式,在过去几年中已变得非常 受欢迎,尤其是在 web 开发中。

基本类型:

数组类型:

对象嵌套:

Json格式

1)  两种构建结构
a) 、对象:“ 名称/ 值” 对的集合(A collection of name/value pairs)不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典 (dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associative array)。b) 、数组: 值的有序列表(An ordered list of values)在大多数语言中,它被理解为数组(array)、矢量(vector), 列表(list)或者序列(sequence)。经过对象、数组 2 种结构就可以组合成复杂的数据结构了。

2)  具体形式
 Json 以 key-value 的形式存储数据
 Key 的取值 为 String 类型;
 Value 的取值 为 String,boolean,Number,数组,Object,null;
 Json 串以{开始,以}结尾;
 Json 串中数组是以[开始,以]结尾;
 Json 串中 Object 是以{开始,以}结尾

一、 解析方式1.

使用 gson  处理

Gson是一个Google提供的一个Java库,可用于将Java对象转换为JSON表示。它也可以被用来将 JSON 字符串转换成一个等效的 Java 对象。提供易于使用的机制如 toString()和构造函数(工厂方法)将 Java 转换为 JSON,反之亦然。允许自定义表示对象,支持任意复杂的对象,生成紧凑和可读性的JSON 输出

1)  转为 Json  字符串
获取所需的对象

2)解析成java对象

I) 、Gson  的  节点对象:
JsonElement : 所有的节点 都是 JsonElement 对象.
JsonPrimitive : 基本的 数据类型的 节点 对象, JsonElement 的子类.
JsonNull : 代表 空节点 对象,即 有 key,value 为空,JsonElement 的子类.
JsonObject : 对象 数据类型的 节点 对象, JsonElement 的 子类.
JsonArray : 数组 数据类型的 节点 对象, JsonElement 的 子类.
II) 、JsonElement  的取值:
JsonPrimitive : value 的 取值对应 java 的
int,double,float,long,short,boolean,char,byte,String,BigDecimal,BigI nteger,Number
JsonObject : value 的取值对应 java 的 Object 对象.
JsonArray : value 的取值对应 java 的 List 及其子类对象.
III) 、解析对象

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.junit.Test; import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
import com.google.gson.reflect.TypeToken;
import com.test.po.User; public class GsonTest { /**
* @Test注解 单元测试
* 1、不能有父类
* 2、不能是静态方法
* 3、不能有参数
* 4、返回值是void
*/ @Test
public void test() {
fail("Not yet implemented");
} /**
* 将对象转换成JSON字符串
*/
@Test
public void testObjectToJson() {
// 得到对象
User user = new User(1, "zhangsan", 18, true); /**
* String json = {"userId":1,"uname":"zhangsan","age":18,"sex":true};
*/
// 得到gson对象
Gson gson = new Gson();
// 将对象转换成JSON字符串
String json = gson.toJson(user); System.out.println(json); } /**
* 将JSON字符串转换成对象
*/
@Test
public void testJSONToObject(){
// 定义JSON字符串
String json = "{\"userId\":1,\"uname\":\"zhangsan\",\"age\":18,\"sex\":true}";
// 得到gson对象
Gson gson = new Gson();
// 将JSON字符串转换成对象
User user = gson.fromJson(json, User.class);
System.out.println(user.getUname());
} /**
* 将集合转换成JSON字符串
*/
@Test
public void testListToJson() {
// 定义集合
List<String> list = new ArrayList<>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
// 得到gson对象
Gson gson = new Gson();
// 将集合转换成JSON字符串
String json = gson.toJson(list); System.out.println(json); List<User> userList = new ArrayList<>();
User user = new User(1, "zhangsan", 18, true);
User user2 = new User(2, "lisi", 19, false);
User user3 = new User(3, "wangwu", 20, true);
userList.add(user);
userList.add(user2);
userList.add(user3);
// 将集合转换成JSON字符串
String json2 = gson.toJson(userList);
System.out.println(json2); } /**
* 将JSON字符串转换成集合
*/
@Test
public void testJsonToList() {
// 定义json对象
String json = "[\"zhangsan\",\"lisi\",\"wangwu\"]";
// 得到gson对象
Gson gson = new Gson();
// 将JSON字符串转换成集合
List<String> list = gson.fromJson(json, new TypeToken<List<String>>(){}.getType());
System.out.println(list.get(0));
} /**
* 将map转换成JSON字符串
*/
@Test
public void testMapToJSON() {
Map<String, Object> map = new HashMap<>();
map.put("uname", "张三");
map.put("age", 18);
map.put("sex", true);
// 得到gson对象
Gson gson = new Gson();
String json = gson.toJson(map); System.out.println(json);
} /**
* 将JSON字符串转换成MAP
*/
@Test
public void testJSONToMap() {
String json = "{\"uname\":\"张三\",\"sex\":true,\"age\":18}";
// 得到gson对象
Gson gson = new Gson();
Map<String, Object> map = gson.fromJson(json, new TypeToken<Map<String, Object>>(){}.getType());
System.out.println(map.get("uname"));
} /**
* JSON节点解析
*
*/
@Test
public void parse() {
String json = "{\"flag\": true,\"data\": {\"userId\":1,\"uname\": \"张三\",\"age\": 18,\"sex\":true }}";
// 节点解析 // 得到解析器
JsonParser parser = new JsonParser(); // 得到根节点
JsonElement element = parser.parse(json); // 根据JSON字符串判断当前是什么json数据类型
JsonObject root = element.getAsJsonObject(); // 解析flag 根据文档判定是boolean类型 基本数据类型
JsonPrimitive primitive = root.getAsJsonPrimitive("flag");
// 将基本数据类型转换成具体的数据类型
boolean flag = primitive.getAsBoolean();
System.out.println(flag); // 解析data 根据文档判定是对象类型 JSONObject
JsonObject data = root.getAsJsonObject("data");
// 将对象转换为具体的对象
User user = new Gson().fromJson(data, User.class);
System.out.println(user.getUname()); } }

使用 fastjson  处理

阿里巴巴 fastJson 是一个 Json 处理工具包,包括“序列化”和“反序列化”两部分,它 具备如下特征:速度最快,测试表明,fastjson 具有极快的性能,超越其他的 Java Json parser。包括自称最快的 JackJson;功能强大,完全支持 JavaBean、集合、Map、日期、Enum,支持范型,支持自省;无依赖。下载路径:https://github.com/alibaba/fastjson/releases/tag/1.2.13   Fastjson 是一个 Java 语言编写的高性能功能完善的 JSON 库。fastjson 采用独创的算法,将 parse 的速度提升到极致,超过所有 json 库,包括曾经号称最快的JackJson。并且还超越了 google 的二进制协议 protocol buf。Fastjson 完全支持 http://json.org 的标准, 也是官方网站收录的参考实现之一。支持各种JDK 类型。包括基本类型、JavaBean、 Collection、Map、Enum、泛型等。支持 JDK 5、JDK 6、Android、阿里云手机等环境。

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.List; import org.junit.Test; import com.alibaba.fastjson.JSON;
import com.test.po.User; public class FastJsonTest { @Test
public void test() {
fail("Not yet implemented");
} @Test
public void testToJson(){
// 得到对象
User user = new User(1, "zhangsan", 18, true);
// 将javaBean转换成JSON字符串
String json1 = JSON.toJSONString(user);
System.out.println(json1); // 定义集合
List<String> list = new ArrayList<>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
String json2 = JSON.toJSONString(list);
System.out.println(json2); List<User> userList = new ArrayList<>();
User user1 = new User(1, "zhangsan", 18, true);
User user2 = new User(2, "lisi", 19, false);
User user3 = new User(3, "wangwu", 20, true);
userList.add(user1);
userList.add(user2);
userList.add(user3);
String json3 = JSON.toJSONString(userList);
System.out.println(json3);
} @Test
public void testToObject() {
// 定义JSON字符串
String json1= "{\"userId\":1,\"uname\":\"zhangsan\",\"age\":18,\"sex\":true}";
User user = JSON.parseObject(json1,User.class);
System.out.println(user.getUname()); // 定义json对象
String json2 = "[\"zhangsan\",\"lisi\",\"wangwu\"]";
List<String> list = JSON.parseArray(json2,String.class);
System.out.println(list.get(2)); String json3 = "[{\"age\":18,\"sex\":true,\"uname\":\"zhangsan\",\"userId\":1},{\"age\":19,\"sex\":false,\"uname\":\"lisi\",\"userId\":2},{\"age\":20,\"sex\":true,\"uname\":\"wangwu\",\"userId\":3}]";
List<User> userList = JSON.parseArray(json3,User.class);
System.out.println(userList.get(1).getUname()); } }

User实体类

public class User {

    private Integer userId;
private String uname;
private Integer age;
private boolean sex; public User() {
super();
} public User(Integer userId, String uname, Integer age, boolean sex) {
super();
this.userId = userId;
this.uname = uname;
this.age = age;
this.sex = sex;
} public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
} }

java与JSON的更多相关文章

  1. Java集合 Json集合之间的转换

    1. Java集合转换成Json集合 关键类:JSONArray jsonArray = JSONArray.fromObject(Object obj); 使用说明:将Java集合对象直接传进JSO ...

  2. Java对象 json之间的转换(json-lib)

    在这里主要简单的介绍一下,如何使用json-lib这个工具包来完成Java对象(或集合)与json对象(或集合)之间的转换~ 1. Java对象转换成json(既创建json) 关键类:JSONObj ...

  3. Java 的 JSON 开源类库选择比较(zz)

    在看了作者的介绍,然后我又到mvnrepository上去看了各个库的的使用数之后,发现只能在jackson和gson之间做选择. 以下是原文 有效选择七个关于Java的JSON开源类库 April  ...

  4. java中json包的使用以及字符串,map,list,自定义对象之间的相互转换

    做一个map和字符串的转换,需要导入这些jar包,这是最基本的一些jar包. 经过多方尝试得出结论入下: 首先导入基本包:json-lib-2.2.3-jdk15.jar 如果没有这个jar包,程序是 ...

  5. java系列--JSON数据的处理

    http://blog.csdn.net/qh_java/article/details/38610599 http://www.cnblogs.com/lanxuezaipiao/archive/2 ...

  6. Java之JSON数据

    特别注意:使用JSON前需要导包 操作步骤地址:http://blog.csdn.net/baidu_37107022/article/details/70876993 1.定义 JSON(JavaS ...

  7. JSON以及Java转换JSON的方法(前后端常用处理方法)

    )); map.put("arr", new String[] { "a", "b" }); map.put("func" ...

  8. java处理json与对象的转化 递归

    整个类是一个case,总结了我在使用java处理json的时候遇到的问题,还有级联关系的对象如何遍历,json和对象之间的转换! 对于对象json转换中遇到的问题我参考了一篇博客,http://blo ...

  9. Java JWT: JSON Web Token

    Java JWT: JSON Web Token for Java and Android JJWT aims to be the easiest to use and understand libr ...

  10. Java解析json字符串和json数组

    Java解析json字符串和json数组 public static Map<String, String> getUploadTransactions(String json){ Map ...

随机推荐

  1. 【POJ - 1742】Coins (多重背包)

    Coins 直接翻译了 Descriptions 给出硬币面额及每种硬币的个数,求从1到m能凑出面额的个数.  Input 多组数据,每组数据前两个数字为n,m.n表示硬币种类数,m为最大面额,之后前 ...

  2. docker入门1--简介、安装

      一. Docker是什么,能做什么,好处和坏处都在哪里? Docker是一个开源的应用容器引擎,用Go语言写成. Docker最主要的作用,就是将程序执行所需要的环境变量与开发的程序代码进行打包处 ...

  3. 局部内部类的final问题

    局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量就必须是final的(或者只赋值一次) 从Java8开始,只要局部变量事实不变那么final关键字可以省略 为什么需要保证变量为final, ...

  4. VS2013:error C1069: 无法读取编译器命令行

    前一阵搞python和matlab,没用VS 2013,今天打开一个C++程序想跑一跑,突然蹦出这么个错误,然后发现电脑上所有的程序都会这样了. 后来发现是TMP/TEMP环境变量路径有空格的问题,更 ...

  5. String类基础的那些事!

    第三阶段 JAVA常见对象的学习 第一章 常见对象--String类 (一) String 类的概述及其构造方法 (1) 概述 多个字符组成的一串数据,例如 "abc" 也可以看成 ...

  6. Nginx之rewrite四种flag

    利用nginx的rewrite命令,可以实现URL的重写,可在nginx配置文件的server.location.if部分使用,对于rewrite有四种不同的flag. redirect:返回302临 ...

  7. CREATE TABLE——数据定义语言 (Data Definition Language, DDL)

    Sql语句分为三大类: 数据定义语言,负责创建,修改,删除表,索引和视图等对象: 数据操作语言,负责数据库中数据的插入,查询,删除等操作: 数据控制语言,用来授予和撤销用户权限. 数据定义语言 (Da ...

  8. SQLite进阶-15.触发器

    目录 触发器(Trigger) 触发器(Trigger)的要点: 触发器应用 查看触发器 删除触发器 触发器(Trigger) 触发器(Trigger)是数据库的回调函数,它会在指定的数据库事件发生时 ...

  9. (十五)mybatis 逆向工程

    目录 为什么需要逆向工程 使用方法 如何读懂生成的代码 总结 为什么需要逆向工程 对于数据库中的那么多的表 ,基本的 CRUD 操作 ,以及 mybatis 需要使用的 接口.mapper ,这些工作 ...

  10. sshpass ssh登录时自动输入密码

    安装 直接安装 sudo apt-get install sshpass 源代码安装 wget http://sourceforge.net/projects/sshpass/files/sshpas ...