Json处理的常用解决方案

通过学习后的思考--JSON对于我的工作来说有什么用?

Json是为保存复杂对象的信息提供了一种解决方案,对于测试或开发都是非常重要的。

现在大型系统大多都是需要调用外部的webService或者依赖外部数据的,利用Json可以对复杂对象

进行备份,那么就可以在一定程度上应对外部环境可能存在的不稳定。

本文目标

1 使用jsontools工具与guava工具实现json<-->对象之间的互相转换,以及从本地资源文件读取json数据

2 使用 http://jsongen.byingtondesign.com/ 网站实现json串转JAVAbean文件

目录

1 使用jsontools工具实现对json串转对象,或者对象转json串

2 使用guava 实现从文件读取Json串 (与1组合使用较为重要)

3 通过网上的Json工具将Json对象转成JAVABEAN文件 ----- http://jsongen.byingtondesign.com/ 

一、 使用jsontools工具实现对json串转对象,或者对象转json串

1 准备jar文件

        <dependency>
            <groupId>com.sdicons.jsontools</groupId>
            <artifactId>jsontools-core</artifactId>
            <version>1.7</version>
        </dependency>

2 转化开始

1 对象转化成json串 

package com.sunfan.serivceImpl.test;

import org.junit.Before;
import org.junit.Test;

import com.sdicons.json.mapper.JSONMapper;
import com.sdicons.json.mapper.MapperException;
import com.sdicons.json.model.JSONValue;
import com.sunfan.entity.User;

public class JsonToolTest {
    User user;
    @Before
    public void setUp() throws Exception {
        user = new User();
        user.setId(0);
        user.setGroup("ces");
        user.setUsername("sunfan");
        user.setRemark("testJsonTool");
    }
    @Test
    public void case1() throws MapperException {//对象转换成json串
        JSONValue jsonStr =JSONMapper.toJSON(user);//第一步----对象转化成JSONValue 
        String json1 = jsonStr.render(true);//第二步转化成字符串 true
        String json2 = jsonStr.render(false);//第二部转化成字符串 false 
        System.out.println("---------true--------------"+"\r\n"+json1);
        System.out.println("---------false--------------"+"\r\n"+json2);
    }
}

执行结果

---------true--------------
{
   "crt_date" : null,
   "group" : "ces",
   "id" : 0,
   "opt_date" : null,
   "password" : null,
   "remark" : "testJsonTool",
   "username" : "sunfan"
}
---------false--------------
{"crt_date":null,"group":"ces","id":0,"opt_date":null,"password":null,"remark":"testJsonTool","username":"sunfan"}

2 json串转对象

package com.sunfan.serivceImpl.test;

import java.io.StringReader;

import org.junit.Before;
import org.junit.Test;

import antlr.RecognitionException;
import antlr.TokenStreamException;

import com.sdicons.json.mapper.JSONMapper;
import com.sdicons.json.mapper.MapperException;
import com.sdicons.json.model.JSONValue;
import com.sdicons.json.parser.JSONParser;
import com.sunfan.entity.User;

public class JsonToolTest {
    User user;
    @Before
    public void setUp() throws Exception {
        user = new User();
        user.setUsername("sunfan");
        user.setRemark("testJsonTool");
    }
    @Test
    public void case1() throws MapperException, TokenStreamException, RecognitionException {//json串转换成对象
        JSONValue jsonStr =JSONMapper.toJSON(user);//对象转化成JSONValue
        String json2 = jsonStr.render(false);//获取JSON串 
        System.out.println(json2); //OK,测试数据已经生成 {"crt_date":null,"group":"ces","id":0,"opt_date":null,"password":null,"remark":"testJsonTool","username":"sunfan"}
        
        JSONValue jsonValue = new JSONParser(new StringReader(json2)).nextValue();   // 第一步---转成 jsonValue
        User user1 = (User)JSONMapper.toJava(jsonValue, User.class); //第二步 ----转化成对象
        System.out.println(user1.getUsername());
    }
}

执行结果

{"crt_date":null,"group":"ces","id":0,"opt_date":null,"password":null,"remark":"testJsonTool","username":"sunfan"}
sunfan

二、使用guava工具实现从文件读取Json串 

1 引入JAR

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>16.0.1</version>
</dependency>

2 新建user.json位于src目录下

{"crt_date":null,"group":"ces","id":0,"opt_date":null,"password":null,"remark":"testJsonTool","username":"sunfan"}

3 从文件获取json串

package com.sunfan.serivceImpl.test;

import java.io.IOException;

import org.junit.Before;
import org.junit.Test;


import com.google.common.base.Charsets;
import com.google.common.io.Resources;

public class JsonToolTest {
    @Before
    public void setUp() throws Exception {
    }
    
    @Test
    public void case1() throws IOException{
        String json = Resources.toString(Resources.getResource("user.json"), Charsets.UTF_8);
        System.out.println(json);
    }
}

4 结合jsonTool工具转化成JAVA对象(重要)

package com.sunfan.serivceImpl.test;

import java.io.IOException;
import java.io.StringReader;

import org.junit.Before;
import org.junit.Test;

import antlr.RecognitionException;
import antlr.TokenStreamException;

import com.google.common.base.Charsets;
import com.google.common.io.Resources;
import com.sdicons.json.mapper.JSONMapper;
import com.sdicons.json.mapper.MapperException;
import com.sdicons.json.model.JSONValue;
import com.sdicons.json.parser.JSONParser;
import com.sunfan.entity.User;

public class JsonToolTest {
    @Before
    public void setUp() throws Exception {
    }
    
    @Test
    public void case1() throws IOException, MapperException, TokenStreamException, RecognitionException{
        String json = Resources.toString(Resources.getResource("user.json"), Charsets.UTF_8);
        System.out.println(json);
        JSONValue jsonValue = new JSONParser(new StringReader(json)).nextValue();
        User user = (User)JSONMapper.toJava(jsonValue,User.class);
        System.out.println(user.getUsername());
    }
}

执行结果

{"crt_date":null,"group":"ces","id":0,"opt_date":null,"password":null,"remark":"testJsonTool","username":"sunfan"}
sunfan

三、通过网上的Json工具将Json串转成JAVABEAN文件

1 得到一枚json串 {"crt_date":null,"group":"ces","id":0,"opt_date":null,"password":null,"remark":"testJsonTool","username":"sunfan"}

2 把json串部署到网页上去(个人使用百度网盘进行上传)

2.1 上传文件

2.2 发布资源


2.3获取下载链接

2.4 获取的链接如下

http://www.baidupcs.com/file/69d5d6339f30db83f1edb09f9da3b469?xcode=023761a3c606f4b7ec18def04187c3f5717d7660b160264e&fid=1023768794-250528-752428762216083&time=1394369937&sign=FDTAXER-DCb740ccc5511e5e8fedcff06b081203-9jCvFze1PUB%2Bc4EfYHPoxafXeYQ%3D&to=wb&fm=Q,B,T,t&expires=1394370537&rt=sh&r=988675073&logid=855048184&sh=1&vuk=1023768794&fn=user.json

3 打开 http://jsongen.byingtondesign.com/ 登陆后把获取到的JSON链接填入即可

4 打开生成的文件查看结果(完成)

Json处理的常用解决方案,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。