java与JSON

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;
    }

}

原文地址:https://www.cnblogs.com/liu1459310172/p/9581844.html

时间: 2024-07-30 04:33:08

java与JSON的相关文章

java系列--JSON数据的处理

http://blog.csdn.net/qh_java/article/details/38610599 http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html java处理JSON的框架就我目前知道的有3种: 1.Jackson框架: 提供两个类 JsonGenerator    ObjectMapper 2.josn-lib框架:提供的主要类有 JSONObject      JSONArray 3.org-

Java解析JSON对象

今天学习一下Java 解析 JSON 准备工作 参考文档 1) www.json.org 2 ) 参考公司其他人的代码(这个就不说了) 依赖jar包 1) org.json.jar 提供以下我的网盘链接 http://pan.baidu.com/s/1jG2zSwe 主要的类 JSON主要有两种结构 1)name/value 的集合 2)value 的集合,在大多数语言中的list,array等,这里的 value 个人觉得就是一个JSON,也就是说是JSON的集合 JAVA处理JSON的类 1

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

整个类是一个case,总结了我在使用java处理json的时候遇到的问题,还有级联关系的对象如何遍历,json和对象之间的转换! 对于对象json转换中遇到的问题我参考了一篇博客,http://blog.csdn.net/xq328220454/article/details/39256589 很有益处,我在文章的后半部分照搬了过来! 首先准备数据,准备了一堆具有主子关系的对象,包含普通属性id,父对象parent,子集合list<HeadCell>,还有关联对象message; 1 @Bef

java to Json or Json to JavaBean

今天练习,放这里,以后再补充 这里使用的jar包是 net.sf.json.JSONObject package yh.test.t1118; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import yh.com.entity.User; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by Ad

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

在这里主要简单的介绍一下,如何使用json-lib这个工具包来完成Java对象(或集合)与json对象(或集合)之间的转换~ 1. Java对象转换成json(既创建json) 关键类:JSONObject jsonObject = JSONObject.from(Object obj); 使用说明:只要将Java对象传入方法,那么便可以得到一个JSONObject,然后你便可以直接json.toString();输出json~ 例子: @Test public void testCreateJ

Java集合 Json集合之间的转换

1. Java集合转换成Json集合 关键类:JSONArray jsonArray = JSONArray.fromObject(Object obj); 使用说明:将Java集合对象直接传进JSONArray.fromObject()中,得到一个JSONArray集合,再直接使用JSONArray的toString()方法,便可得到json集合 示例代码: @Test public void testCreateJsonArray() { //Java集合 List<Employee> l

JAVA与JSON的序列化、反序列化

package com.linkage.app.memcache; import java.util.HashMap;import java.util.Map.Entry; import net.sf.ezmorph.Morpher;import net.sf.ezmorph.MorpherRegistry;import net.sf.ezmorph.bean.BeanMorpher;import net.sf.json.JSONObject;import net.sf.json.util.JS

JS和JAVA使用JSON方法解析

JS和JAVA使用JSON方法解析 一.JS部分================== 将json字符串转换为json对象的方法.在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键. 例如: JSON字符串: var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象: var str2 = {

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

做一个map和字符串的转换,需要导入这些jar包,这是最基本的一些jar包. 经过多方尝试得出结论入下: 首先导入基本包:json-lib-2.2.3-jdk15.jar 如果没有这个jar包,程序是写不起来的. 现在保证了程序编译能够通过,跑一下 出现异常:org/apache/commons/lang/exception/NestableRuntimeException 导入commons-lang-2.3.jar,问题解决. 跑一下: 出现异常:java.lang.ClassNotFoun

JAVA操作JSON格式数据

由于近些日子公司在弄微信项目,而微信官方API所提供的接口当中,有些需要以POST方式进行请求,且数据传输格式要求为JSON格式数据,之前没怎么研究过,而且传递的数据格式相对也比较简单,所以直接都是采用的字符串拼接的方式进行组装的,之后再用String.format格式化一下就好了. //需要提交的json数据 String jsonData = "{\"openid\":\"%s\",\"to_groupid\":%d}";