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) 、解析对象

  1. import static org.junit.Assert.*;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7.  
  8. import org.junit.Test;
  9.  
  10. import com.google.gson.Gson;
  11. import com.google.gson.JsonElement;
  12. import com.google.gson.JsonObject;
  13. import com.google.gson.JsonParser;
  14. import com.google.gson.JsonPrimitive;
  15. import com.google.gson.reflect.TypeToken;
  16. import com.test.po.User;
  17.  
  18. public class GsonTest {
  19.  
  20. /**
  21. * @Test注解 单元测试
  22. * 1、不能有父类
  23. * 2、不能是静态方法
  24. * 3、不能有参数
  25. * 4、返回值是void
  26. */
  27.  
  28. @Test
  29. public void test() {
  30. fail("Not yet implemented");
  31. }
  32.  
  33. /**
  34. * 将对象转换成JSON字符串
  35. */
  36. @Test
  37. public void testObjectToJson() {
  38. // 得到对象
  39. User user = new User(1, "zhangsan", 18, true);
  40.  
  41. /**
  42. * String json = {"userId":1,"uname":"zhangsan","age":18,"sex":true};
  43. */
  44. // 得到gson对象
  45. Gson gson = new Gson();
  46. // 将对象转换成JSON字符串
  47. String json = gson.toJson(user);
  48.  
  49. System.out.println(json);
  50.  
  51. }
  52.  
  53. /**
  54. * 将JSON字符串转换成对象
  55. */
  56. @Test
  57. public void testJSONToObject(){
  58. // 定义JSON字符串
  59. String json = "{\"userId\":1,\"uname\":\"zhangsan\",\"age\":18,\"sex\":true}";
  60. // 得到gson对象
  61. Gson gson = new Gson();
  62. // 将JSON字符串转换成对象
  63. User user = gson.fromJson(json, User.class);
  64. System.out.println(user.getUname());
  65. }
  66.  
  67. /**
  68. * 将集合转换成JSON字符串
  69. */
  70. @Test
  71. public void testListToJson() {
  72. // 定义集合
  73. List<String> list = new ArrayList<>();
  74. list.add("zhangsan");
  75. list.add("lisi");
  76. list.add("wangwu");
  77. // 得到gson对象
  78. Gson gson = new Gson();
  79. // 将集合转换成JSON字符串
  80. String json = gson.toJson(list);
  81.  
  82. System.out.println(json);
  83.  
  84. List<User> userList = new ArrayList<>();
  85. User user = new User(1, "zhangsan", 18, true);
  86. User user2 = new User(2, "lisi", 19, false);
  87. User user3 = new User(3, "wangwu", 20, true);
  88. userList.add(user);
  89. userList.add(user2);
  90. userList.add(user3);
  91. // 将集合转换成JSON字符串
  92. String json2 = gson.toJson(userList);
  93. System.out.println(json2);
  94.  
  95. }
  96.  
  97. /**
  98. * 将JSON字符串转换成集合
  99. */
  100. @Test
  101. public void testJsonToList() {
  102. // 定义json对象
  103. String json = "[\"zhangsan\",\"lisi\",\"wangwu\"]";
  104. // 得到gson对象
  105. Gson gson = new Gson();
  106. // 将JSON字符串转换成集合
  107. List<String> list = gson.fromJson(json, new TypeToken<List<String>>(){}.getType());
  108. System.out.println(list.get(0));
  109. }
  110.  
  111. /**
  112. * 将map转换成JSON字符串
  113. */
  114. @Test
  115. public void testMapToJSON() {
  116. Map<String, Object> map = new HashMap<>();
  117. map.put("uname", "张三");
  118. map.put("age", 18);
  119. map.put("sex", true);
  120. // 得到gson对象
  121. Gson gson = new Gson();
  122. String json = gson.toJson(map);
  123.  
  124. System.out.println(json);
  125. }
  126.  
  127. /**
  128. * 将JSON字符串转换成MAP
  129. */
  130. @Test
  131. public void testJSONToMap() {
  132. String json = "{\"uname\":\"张三\",\"sex\":true,\"age\":18}";
  133. // 得到gson对象
  134. Gson gson = new Gson();
  135. Map<String, Object> map = gson.fromJson(json, new TypeToken<Map<String, Object>>(){}.getType());
  136. System.out.println(map.get("uname"));
  137. }
  138.  
  139. /**
  140. * JSON节点解析
  141. *
  142. */
  143. @Test
  144. public void parse() {
  145. String json = "{\"flag\": true,\"data\": {\"userId\":1,\"uname\": \"张三\",\"age\": 18,\"sex\":true }}";
  146. // 节点解析
  147.  
  148. // 得到解析器
  149. JsonParser parser = new JsonParser();
  150.  
  151. // 得到根节点
  152. JsonElement element = parser.parse(json);
  153.  
  154. // 根据JSON字符串判断当前是什么json数据类型
  155. JsonObject root = element.getAsJsonObject();
  156.  
  157. // 解析flag 根据文档判定是boolean类型 基本数据类型
  158. JsonPrimitive primitive = root.getAsJsonPrimitive("flag");
  159. // 将基本数据类型转换成具体的数据类型
  160. boolean flag = primitive.getAsBoolean();
  161. System.out.println(flag);
  162.  
  163. // 解析data 根据文档判定是对象类型 JSONObject
  164. JsonObject data = root.getAsJsonObject("data");
  165. // 将对象转换为具体的对象
  166. User user = new Gson().fromJson(data, User.class);
  167. System.out.println(user.getUname());
  168.  
  169. }
  170.  
  171. }

使用 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、阿里云手机等环境。

  1. import static org.junit.Assert.*;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import org.junit.Test;
  7.  
  8. import com.alibaba.fastjson.JSON;
  9. import com.test.po.User;
  10.  
  11. public class FastJsonTest {
  12.  
  13. @Test
  14. public void test() {
  15. fail("Not yet implemented");
  16. }
  17.  
  18. @Test
  19. public void testToJson(){
  20. // 得到对象
  21. User user = new User(1, "zhangsan", 18, true);
  22. // 将javaBean转换成JSON字符串
  23. String json1 = JSON.toJSONString(user);
  24. System.out.println(json1);
  25.  
  26. // 定义集合
  27. List<String> list = new ArrayList<>();
  28. list.add("zhangsan");
  29. list.add("lisi");
  30. list.add("wangwu");
  31. String json2 = JSON.toJSONString(list);
  32. System.out.println(json2);
  33.  
  34. List<User> userList = new ArrayList<>();
  35. User user1 = new User(1, "zhangsan", 18, true);
  36. User user2 = new User(2, "lisi", 19, false);
  37. User user3 = new User(3, "wangwu", 20, true);
  38. userList.add(user1);
  39. userList.add(user2);
  40. userList.add(user3);
  41. String json3 = JSON.toJSONString(userList);
  42. System.out.println(json3);
  43. }
  44.  
  45. @Test
  46. public void testToObject() {
  47. // 定义JSON字符串
  48. String json1= "{\"userId\":1,\"uname\":\"zhangsan\",\"age\":18,\"sex\":true}";
  49. User user = JSON.parseObject(json1,User.class);
  50. System.out.println(user.getUname());
  51.  
  52. // 定义json对象
  53. String json2 = "[\"zhangsan\",\"lisi\",\"wangwu\"]";
  54. List<String> list = JSON.parseArray(json2,String.class);
  55. System.out.println(list.get(2));
  56.  
  57. 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}]";
  58. List<User> userList = JSON.parseArray(json3,User.class);
  59. System.out.println(userList.get(1).getUname());
  60.  
  61. }
  62.  
  63. }

User实体类

  1. public class User {
  2.  
  3. private Integer userId;
  4. private String uname;
  5. private Integer age;
  6. private boolean sex;
  7.  
  8. public User() {
  9. super();
  10. }
  11.  
  12. public User(Integer userId, String uname, Integer age, boolean sex) {
  13. super();
  14. this.userId = userId;
  15. this.uname = uname;
  16. this.age = age;
  17. this.sex = sex;
  18. }
  19.  
  20. public Integer getUserId() {
  21. return userId;
  22. }
  23. public void setUserId(Integer userId) {
  24. this.userId = userId;
  25. }
  26. public String getUname() {
  27. return uname;
  28. }
  29. public void setUname(String uname) {
  30. this.uname = uname;
  31. }
  32. public Integer getAge() {
  33. return age;
  34. }
  35. public void setAge(Integer age) {
  36. this.age = age;
  37. }
  38. public boolean isSex() {
  39. return sex;
  40. }
  41. public void setSex(boolean sex) {
  42. this.sex = sex;
  43. }
  44.  
  45. }

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. text matching(文本匹配) 相关资料总结

    最近工作上需要做句子语义去重相关的工作,本质上这是属于NLP中text matching(文本匹配)相关的内容.因此我花了一些时间整理了一些关于这个方向的资料,整理如下(也许会持续更新): BiMPM ...

  2. KMP --关于cogs1570 乌力波

    题目链接:http://cogs.pro:8081/cogs/problem/problem.php?pid=vQzXJkgWa [题目描述] 法国作家乔治·佩雷克(Georges Perec,193 ...

  3. 洛谷 题解 P4955 【[USACO14JAN]Cross Country Skiing 越野滑雪】

    二分+DFS 看到这么多大佬写了并查集,BFS的,还没有人写DFS版的,那么肯定是要来水水积分的啦毕竟这可是道伪紫题呢! 做法楼上楼下也讲得很清楚了吧,详见代码的注释 #include<bits ...

  4. 菜鸟系列Fabric源码学习—创建通道

    通道创建源码解析 1. 与通道创建相关配置及操作命令 主要是configtx.yaml.通过应用通道的profile生成创建通道的配置文件. TwoOrgsChannel: Consortium: S ...

  5. 快速查看表结构 SQL server查看表注释以及字段注释表结构字段说明

    DECLARE @tableName NVARCHAR(MAX);SET @tableName = N'UserIntegralExchange';   --表名!!! SELECT CASE WHE ...

  6. HashMap集合-遍历方法

    # HashMap集合-遍历方法 先定义好集合: public static void main(String[] args) { Map<String,String> onemap=ne ...

  7. Java学习路径

    -------第一部分:基础语法-------- 1.输出语句 1.1 hello world 1.2 拼接输出.换行和不换行输出 1.3 拼接变量输出 2.输入语句: 2.1 定义变量,赋值(整数. ...

  8. 160个creakme(八)

    peid跑一下,没有壳 就是输入一个码 直接运行一下,出现错误提示 找字符串能找到代码位置 然后看一下401E43的引用,好像跳转指令后面就是注册成功相关字符串 然后nop掉这条指令,发现可以运行出正 ...

  9. eclipse 创建聚合maven项目(转)

    转自https://blog.csdn.net/u013239111/article/details/76560167 以前我们搭建项目时,通常是吧pojo.dao.service.配置文件等都放在一 ...

  10. vue中的键盘事件

    @keydown(键盘按下时触发),@keypress(键盘按住时触发),@keyup(键盘弹起) 获取按键的键码 e.keyCode @keyup.13     按回车键 @keyup.enter ...