一:前言

  来公司一个星期,把最近做的东西梳理下,并把觉得有必要的知识点记载下,现在传数据很多都是用JSON来传数据,所以我就找了集中传json的方式,其实是有五种的,但是有一个我没有用过,太陌生了,上次也在网上看了看,估计可以照着用,但是要我讲的话我还是觉得挺有难度的。还有个也没有用过。我都会在下面提一下

二:内容

  我现在可以用的JSON有三种:

  (一):Google的JSON的jar包处理

  

  (二):阿里巴巴解析JSON的jar包

  

  (三):Struts2解析的jar包

  

  (四):jsonrpc,这个我看看了,主要是在网页里面进行,它可以你透明地在JavaScript中调用Java代码:具体可以看这篇文章

http://blog.csdn.net/yaerfeng/article/details/26079889

  (五):json-simple.jar的jar包,其实我不会用,只是知道有这种jar包,没有用过,刚刚看到的。

二:内容

  (一):google的Json解析方式

 package org.wh.JsonDemo;

 import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken; public class GJsonTest { public static void main(String[] args) {
Student s1=new Student(1,"mahone","男",23,"湖北随州",new Date(),new java.sql.Date(0));
Student s2=new Student(2,"mouse","男",23,"湖北随州",new Date(),new java.sql.Date(0));
Student s3=new Student(3,"moon","女",23,"湖北随州",new Date(),new java.sql.Date(0));
Student s4=new Student(4,"mahone1","男",23,"湖北随州",new Date(),new java.sql.Date(0));
Student s5=new Student(5,"mahone2","男",23,"湖北随州",new Date(),new java.sql.Date(0)); List<Student> list=new ArrayList<Student>();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5); Map<String,String> map=new HashMap<String,String>();
map.put("a", "aa");
map.put("b", "bb");
map.put("c", "cc");
map.put("d", "dd");
map.put("e", "ee"); //--------------------google 的json-----------------------------------------------------------------
System.out.println(list);
Gson g=new Gson();
String exInfo1=g.toJson(s1);
System.out.println("Google转化为的单个对象:-->"+exInfo1); String exList=g.toJson(list);
System.out.println("Google的List转化的json:-->"+exList); String exMap=g.toJson(map);
System.out.println("Google的map的转换---->"+exMap); //把json转换为List
Student st=g.fromJson("{\"id\":1,\"name\":\"mahone\",\"sex\":\"男\",\"age\":23,\"birthday\":\"Dec 18, 2014 3:59:45 PM\",\"address\":\"湖北随州\",\"senior\":\"一月 1, 1970\"}", Student.class);
System.out.println("-->"+st);
List<Student> list1=g.fromJson("[{\"id\":1,\"name\":\"mahone\",\"sex\":\"男\",\"age\":23,\"birthday\":\"Dec 18, 2014 3:59:45 PM\",\"address\":\"湖北随州\",\"senior\":\"一月 1, 1970\"},{\"id\":2,\"name\":\"mahone\",\"sex\":\"男\",\"age\":23,\"birthday\":\"Dec 18, 2014 3:59:45 PM\",\"address\":\"湖北随州\",\"senior\":\"一月 1, 1970\"}]",new TypeToken<List<Student>>(){}.getType());
List<Student> list2=g.fromJson(exList,new TypeToken<List<Student>>(){}.getType());
for(Student ss:list1){
System.out.println("id:"+ss.getId());
} for(Student ss:list2){
System.out.println("id:"+ss.getId());
} //把json转化为Map
Map<String,String> m=g.fromJson(exMap,new TypeToken<Map<String,String>>(){}.getType());
for(String ms:map.keySet()){
//key---->value
System.out.println(ms+"--->"+map.get(ms));
}
//http://blog.csdn.net/lk_blog/article/details/7685210链接上有更加详细的解析,我这里只是日常用的
} }

  (二):阿里巴巴的解析方式

 package org.wh.JsonDemo;

 import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; public class AliJsonDemo { public static void main(String[] args) {
Student s1=new Student(1,"mahone","男",23,"湖北随州",new Date(),new java.sql.Date(0));
Student s2=new Student(2,"mouse","男",23,"湖北随州",new Date(),new java.sql.Date(0));
Student s3=new Student(3,"moon","女",23,"湖北随州安居",new Date(),new java.sql.Date(0));
Student s4=new Student(4,"mahone1","男",23,"湖北随州",new Date(),new java.sql.Date(0));
Student s5=new Student(5,"mahone2","男",23,"湖北随州",new Date(),new java.sql.Date(0)); Student1 s11=new Student1(1,"mahone","男",23,"湖北随州",new Date());
Student1 s22=new Student1(2,"mouse","男",23,"湖北随州",new Date());
Student1 s33=new Student1(3,"moon","女",23,"湖北随州安居",new Date());
Student1 s44=new Student1(3,"moon","女",23,"湖北随州安居",new Date());
Student1 s55=new Student1(3,"moon","女",23,"湖北随州安居",new Date()); List<Student> list=new ArrayList<Student>();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5); Map<String,String> map=new HashMap<String,String>();
Map<String,Student1> map1=new HashMap<String,Student1>();
map.put("a", "aa");
map.put("b", "bb");
map.put("c", "cc");
map.put("d", "dd");
map.put("e", "ee"); map1.put("a",s11);
map1.put("b",s22);
map1.put("c",s33);
map1.put("d",s44);
map1.put("e",s55); //--------------------阿里巴巴的json String aliInfo=JSON.toJSONString(s1);
System.out.println("阿里巴巴转换单个对象的json格式:"+aliInfo); String aliList=JSON.toJSONString(list);
System.out.println("阿里巴巴转换List对象的json的格式"+aliList); String aliMap=JSON.toJSONString(map);
System.out.println("阿里巴巴转换map对象的json的个格式"+aliMap); //单个对象的反序列化
Student ss=JSON.parseObject(aliInfo,Student.class);
System.out.println(ss.getId()+"-->"+ss.getName()); //将Json转换为List
List<Student> ls=JSON.parseArray(aliList,Student.class);
System.out.println(ls);
for(Student su:ls){
System.out.println("id的值"+su.getId());
} //将map转化为
String aliMap1=JSON.toJSONString(map1);
JSONObject jo=JSON.parseObject(aliMap1);
System.out.println("获取"+jo.getString("a"));
System.out.println("获取"+jo.getObject("a", Student.class).getId()); } }

  最后一种,我在写的时候老是报错,现在不知道是由于里面有日期还是由于加了日期使得整个对象变得复杂了的鱼那样。还是把代码加上,没有完整

 package org.wh.JsonDemo;

 import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; public class StrutsJsonDemo {
public static void main(String args[]){
Student1 s1=new Student1(1,"mahone","男",23,"湖北随州",new Date());
Student1 s2=new Student1(2,"mouse","男",23,"湖北随州",new Date());
Student1 s3=new Student1(3,"moon","女",23,"湖北随州安居",new Date());
Student1 s4=new Student1(4,"mahone1","男",23,"湖北随州",new Date());
Student1 s5=new Student1(5,"mahone2","男",23,"湖北随州",new Date()); List<Student1> list=new ArrayList<Student1>();
list.add(s1);
list.add(s2);
// list.add(s3);
// list.add(s4);
// list.add(s5); Map<String,String> map=new HashMap<String,String>();
map.put("a", "aa");
map.put("b", "bb");
map.put("c", "cc");
map.put("d", "dd");
map.put("e", "ee"); //将list转换为json数据
JSONArray listTojson=JSONArray.fromObject(list);
System.out.println("将list转换为json:"+listTojson); //将json转换为List
JSONObject jsonObject=JSONObject.fromObject(listTojson.toString());
JSONArray jsonArray = new JSONArray();
Object o=JSONArray.toList(jsonArray,Student1.class);
System.out.println(o);

出现的bug如下:

将list转换为json:[{"address":"湖北随州","age":23,"birthday":{"date":18,"day":4,"hours":18,"minutes":24,"month":11,"seconds":49,"time":1418898289977,"timezoneOffset":-480,"year":114},"id":1,"name":"mahone","senior":null,"sex":"男"},{"address":"湖北随州","age":23,"birthday":{"date":18,"day":4,"hours":18,"minutes":24,"month":11,"seconds":49,"time":1418898289977,"timezoneOffset":-480,"year":114},"id":2,"name":"mouse","senior":null,"sex":"男"}]
Exception in thread "main" net.sf.json.JSONException: A JSONObject text must begin with '{' at character 1 of [{"address":"湖北随州","age":23,"birthday":{"date":18,"day":4,"hours":18,"minutes":24,"month":11,"seconds":49,"time":1418898289977,"timezoneOffset":-480,"year":114},"id":1,"name":"mahone","senior":null,"sex":"男"},{"address":"湖北随州","age":23,"birthday":{"date":18,"day":4,"hours":18,"minutes":24,"month":11,"seconds":49,"time":1418898289977,"timezoneOffset":-480,"year":114},"id":2,"name":"mouse","senior":null,"sex":"男"}]
at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:505)
at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1144)
at net.sf.json.JSONObject._fromString(JSONObject.java:1373)
at net.sf.json.JSONObject.fromObject(JSONObject.java:161)
at net.sf.json.JSONObject.fromObject(JSONObject.java:130)
at org.wh.JsonDemo.StrutsJsonDemo.main(StrutsJsonDemo.java:40)

这里的日期又成了对象,所以我觉得很可能是这个日期变得复杂了才使得其解析不了,下篇在仔细看看。

三:总结

  做了决定,下了决心就得主动动手来做了。自己做了才知道是怎么回事,所以必须的做。前段时间看了《匆匆那年》,挺感慨的,我的青春一去不复回啊,还是想起了高总时刻,特别是高一啊。MouseMoon。电影最后的那句”不悔梦归处,只恨太匆匆“啊!错过就是一辈子啊。

 

3中转换JSON数据的方式的更多相关文章

  1. C#的百度地图开发(二)转换JSON数据为相应的类

    原文:C#的百度地图开发(二)转换JSON数据为相应的类 在<C#的百度地图开发(一)发起HTTP请求>一文中我们向百度提供的API的URL发起请求,并得到了返回的结果,结果是一串JSON ...

  2. java读取url中json文件中的json数据

    有时候需要远程从其他接口中获取json数据,如果遇到返回的json数据是一个文件而不直接是数据,那么可以通过以下方法进行读取: /** * 从数据接口获取到数据 * @return * @throws ...

  3. js声明json数据,打印json数据,遍历json数据,转换json数据为数组

    1.js声明json数据: 2.打印json数据: 3.遍历json数据: 4.转换json数据为数组; //声明JSON var json = {}; json.a = 1; //第一种赋值方式(仿 ...

  4. 关于mysql中存储json数据的读取问题

    在mysql中存储json数据,字段类型用text,java实体中用String接受. 返回前端时(我这里返回前端的是一个map),为了保证读取出的数据排序错乱问题,定义Map时要用LinkedHas ...

  5. JMeter 中对于Json数据的处理方法

    JMeter中对于Json数据的处理方法 http://eclipsesource.com/blogs/2014/06/12/parsing-json-responses-with-jmeter/ J ...

  6. [转]EntityFramework中常用的数据修改方式

    本文转自:http://blog.csdn.net/itmaxin/article/details/47662151 上一篇文章里提到了 EntityFramework中常用的数据删除方式,那么修改对 ...

  7. 截取HTML中的JSON数据并利用GSON进行解析(Android)

    截取HTML中的JSON数据并利用GSON进行解析(Android) 前言 最近在做的一个Android项目,需要自行搭建服务器,队友选择买了阿里云的服务器ESC产品,在数据获取上,我们采用了Andr ...

  8. vue中引入json数据,不用本地请求

    1.我的项目结构,需要在Daily.vue中引入daily.js中的json数据 2.把json数据放入一个js文件中,用exports导出,vscode的json格式太严格了,很多数据,调了一个多小 ...

  9. ASP.NET Core中返回 json 数据首字母大小写问题

    ASP.NET Core中返回 json 数据首字母大小写问题 在asp.net core中使用ajax请求动态绑定数据时遇到该问题 后台返回数据字段首字母为定义的大写,返回的数据没有问题 但是在前台 ...

随机推荐

  1. Python正则表达式中的re.S,re.M,re.I的作用

    正则表达式可以包含一些可选标志修饰符来控制匹配的模式.修饰符被指定为一个可选的标志.多个标志可以通过按位 OR(|) 它们来指定.如 re.I | re.M 被设置成 I 和 M 标志: 修饰符 描述 ...

  2. Unity 3d C#和Javascript脚本互相调用 解决方案(非原创、整理资料,并经过实践得来)

    Unity 3d C#和Javascript脚本互相调用 解决方案 1.背景知识 脚本的编译过程分四步: 1. 编译所有 ”Standard Assets”, “Pro Standard Assets ...

  3. 不用找了,比较全的signalR例子已经为你准备好了(2)---JqGrid 服务端刷新方式-注释详细-DEMO源码下载

    上次用客户端进行数据刷新的方式,和官方的Demo实现存在差异性,今天花了一点时间好好研究了一下后台时时刷新的方式.将写的代码重新update了一次,在这之前找过好多的资料,发现都没有找到好的例子,自己 ...

  4. Qt Qwdget 汽车仪表知识点拆解5 标题栏图标闪烁

    先贴上效果图,注意,没有写逻辑,都是乱动的 看下最上面的部分,有一些仪表图标在闪烁,如果一个一个写,也是可以实现的,不过感觉要累死的节奏 这里我写了一个我自己的Label,完了把把这些QLabel提升 ...

  5. Jenkins - 持续集成部署

    1. 安装svn:用于checkout源码 (1)yum 安装:yum -y install subversion (2)查看svn版本信息:svnserver --version 2. 安装jdk ...

  6. 【app.json】配置说明,不断更新中

    app.json文件用来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 等. 注意: 1) json配置中键名.键值必须使用双引号,不能使用单引号. 2) 以 ...

  7. 官方文档 恢复备份指南七 Using Flashback Database and Restore Points

    本章内容: Understanding Flashback Database, Restore Points and Guaranteed Restore Points Logging for Fla ...

  8. 使用SetOperations(无序)操作redis

    方法 c参数 s说明 Long add(K key, V... values); K key:集合key V... values:key对应的值 向集合中添加一个或多一个元素 Long remove( ...

  9. C# 测试代码的运行时间

    使用以下方法可以准确的记录代码运行的耗时. System.Diagnostics.Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); / ...

  10. lintcode-94-二叉树中的最大路径和

    94-二叉树中的最大路径和 给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和) 样例 给出一棵二叉树: 返回 6 标签 动态规划 ...