JSON
Posted dhome
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON相关的知识,希望对你有一定的参考价值。
一、介绍
JSON:javascript对象表示法(JavaScript Object Notation),一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。用来描述数据结构,它是基于纯文本的数据格式。广泛应用于服务端和客户端的数据交互。
基本类型
数组类型
对象嵌套
二、解析方式
1、使用Gson处理
Gson是Google提供的一个Java库,可用于将Java对象转换为JSON表示。也可以将JSON字符串转换成一个等效的Java对象
(1)将对象转换为JSON字符串
(2)将JSON字符串转换为对象
(3)将集合转换为JSON字符串
(4)将JSON字符串转换为集合
(5)将Map集合转换成JSON字符串
(6)将JSON字符串转换为Map集合
2、JSON节点解析
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 及其子类对象
/** * JSON节点解析 */ @Test public void testParse(){ // 准备JSON字符串 String json = "{"flag": true,"data": {"userId":1,"uname": "张三","age": 18,"sex":true }}"; // 获得解析器 JsonParser parser=new JsonParser(); // 获得根节点元素 JsonElement element=parser.parse(json); //根据文档判断根节点属于什么类型的Gson节点对象 JsonObject root=element.getAsJsonObject(); //取得节点下的某个节点 JsonPrimitive flagJson=root.getAsJsonPrimitive("flag"); //基本节点取值 boolean flag=flagJson.getAsBoolean(); //获得data节点的值 JsonObject dataJson=root.getAsJsonObject("data"); //获得Gson对象,并将节点上的数据转换为对象 User user=new Gson().fromJson(dataJson, User.class); System.out.println(user.getUname()+flag); }
3、FastJson解析
阿里巴巴 fastJson 是一个 Json 处理工具包,包括“序列化”和“反序列化”两部分,它 具备如下特征:速度最快,测试表明, fastjson 具有极快的性能,超越其他的 Java Json parser。包括自称最快的 JackJson;功能强大,完全支持 JavaBean、集合、 Map、 日期、 Enum,支持范型,支持自省;无依赖。
/** * 将对象转换为JSON字符串 */ @Test public void testToJson(){ //得到对象 User user=new User(1, "张三", 18, true); //转换为Json字符串 String json1=JSON.toJSONString(user); System.out.println(json1); //定义集合 List<String> list=new ArrayList<>(); list.add("张三"); list.add("李四"); list.add("王五"); String json2=JSON.toJSONString(list); System.out.println(json2); List<User> userList=new ArrayList<>(); userList.add(new User(1,"张三",18,true)); userList.add(new User(2, "李四", 19, false)); userList.add(new User(3,"王五",20,true)); String json3=JSON.toJSONString(userList); System.out.println(json3); } /** * 将JSON字符串转换为对象 */ @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()); }
三、Servlet中的简单应用
把数据解析成JSON格式然后发送到前台
以上是关于JSON的主要内容,如果未能解决你的问题,请参考以下文章
json 可视代码工作室Angular with Firebase片段
错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”