一:前言

  来公司一个星期,把最近做的东西梳理下,并把觉得有必要的知识点记载下,现在传数据很多都是用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. @Transactional spring 事务失效(转载)

    原文地址:http://hwak.iteye.com/blog/1611970 1. 在需要事务管理的地方加@Transactional 注解.@Transactional 注解可以被应用于接口定义和 ...

  2. HTML5 + JS 调取摄像头拍照下载

    <video id="video" width="640" height="480" autoplay></video&g ...

  3. C语言RL78 serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 前段时间完成的hype ...

  4. Bootstrap4用法

    #Bootstrap4 ## 网格系统- .col- 针对所有设备- .col-sm- 平板 - 屏幕宽度等于或大于 576px- .col-md- 桌面显示器 - 屏幕宽度等于或大于 768px)- ...

  5. PostgreSQL 10.0 压缩版的 pgAdmin 不能用的问题

    PostgreSQL终于发布10.0正式版了!下载压缩版的更新了一下本机的版本,然后打开pgAdmin的时候总是报错“The application server could not be conta ...

  6. 获取.jar文件运行时所处的路径

    在Windows控制台中运行.jar文件时的两种环境: (1)控制台当前所在目录是.jar文件所在的目录 (2)控制台当前所在目录不是.jar文件所在的目录 我的期望: 我希望在上述两种环境下均可以得 ...

  7. jmeter插件之VariablesFromCSV

    项目需求: 由于该项目的特殊性,需要新建很多个jmx脚本,并且这些jmx的全局用户变量都一样,如果要修改的话,没法做到统一修改. 实现思路: 为了满足需求,在jemter官网找到该插件Variable ...

  8. 大批量复制Oracle数据表,连带复制主键约束,字段说明以及字段默认值(量产)

    DECLARE      CURSOR tab_name_cur       IS           SELECT table_name           FROM user_tables     ...

  9. 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 间接调用 Python 实现

    现在的深度学习框架一般都是基于 Python 来实现,构建.训练.保存和调用模型都可以很容易地在 Python 下完成.但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将通过 ...

  10. 文件系统之 stat与access

    stat命令 stat既有命令也有同名函数,用来获取文件Inode里主要信息,所以stat命令的输出信息比ls命令的输出信息要更详细,stat 跟踪符号链接,lstat不跟踪符号链接,其中会输出对应文 ...