史上最全的JSON入门教程读懂这篇带你玩转JSON
JSON是大家再熟悉不过的一门数据格式了,它具有很多优点,比如占用带宽比较小(格式是压缩的)、js可以通过eval()读取、支持多种语言(C、C++、JAVA、PHP等等),我们日常开发中用的比较多的是对json进行封装和解析,这块内容也是我们必须去掌握的,所以我花了一点时间对json的各种封装个解析做了一个详细的教程,方便初学者快速上手入门
什么是JSON?
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。它是基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。JSON就是一串字符串 只不过元素会使用特定的符号标注。
JSON语法规则
JSON 语法是 JavaScript 对象表示语法的子集
{} 双括号表示对象
[] 中括号表示数组
"" 双引号内是属性或值
: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
数据在键值对中
数据由逗号分隔
比如:{“name”,“zhangb”}表示为一个包含name为zhangb的对象,[{“name”,“zhangb”},{“name”,“lidan”}]表示包含两个对象的数组
这个数组也可以简化为{“name”:[“zhangb”,“lidan”]}
注意:json官网最新的规定如果是字符串,不管是key还是value都得带双引号,比如:{name,‘json’}校验不通过的。
JSON 名称/值对
JSON 数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
“name” : “zhangb”
这很容易理解,等价于这条 JavaScript 语句:
name = “zhangb”
JSON的拼接和封装
jsonlib的示例
代码示例如下
package com.zhangb;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;/*** @author zhangb* @time 0514* @desccription 拼接、封装json字符串*/
public class JsonDemo {public static void main(String[] args) {setJson();joinJsonlib();}/*** 采用字符串拼接json* 此处注意转义符*/private static void setJson(){String str = "{\"status\":0,\"desc\":\"成功\",\"data\":[{\"name\":\"zhangb\",\"sex\":\"男\",\"description\":\"JSON教程\"},{\"name\":\"lidan\",\"sex\":\"女\",\"description\":\"测试\"}]}";System.out.println("输出字符串拼接的json");System.out.println(str);}/*** appache的json,需导入以下包才可以使用* json-lib-2.4-jdk15.jar* commons-lang.jar* commons-beanutils.jar* commons-collections.jar* commons-logging.jar* ezmorph.jar*/private static void joinJsonlib(){JSONObject json = new JSONObject();//可用put或者element添加对象,大部分时候无区别,value为空时候需要注意json.put("status",0);json.element("desc","成功");JSONObject obj = new JSONObject();JSONArray jsonArray = new JSONArray();obj.put("name","zhangb");obj.put("sex","男");obj.put("desc","JSON教程");//向obj中添加 对象jsonArray.add(obj);//此时obj中已经有了对象,如需要继续添加单独对象,需重新new或者清空objobj.clear();obj.put("name","lidan");obj.put("sex","女");obj.put("desc","测试");jsonArray.add(obj);//添加到最开始的jsonjson.put("data",jsonArray);System.out.println("输出json封装方法");System.out.println(json.toString());}
}
输出结果

阿里巴巴json封装
代码示例如下
这一块和json-lib基本上没什么差别,但是咱FastJson只需要一个包,很方便
package com.zhangb;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;/*** @author zhangb* @time 0514* @desccription 拼接、封装json字符串*/
public class JsonDeme01 {public static void main(String[] args) {joinAliJson();}private static void joinAliJson(){JSONObject json = new JSONObject();json.put("status",0);json.put("desc","成功");JSONArray jsonArray = new JSONArray();JSONObject obj = new JSONObject();obj.put("name","zhangb");obj.put("sex","男");obj.put("desc","JSON教程");//向obj中添加 对象jsonArray.add(obj);//此时obj中已经有了对象,如需要继续添加单独对象,需重新new或者清空objobj.clear();obj.put("name","lidan");obj.put("sex","女");obj.put("desc","测试");jsonArray.add(obj);json.put("data",jsonArray);System.out.println("阿里巴巴json封装");System.out.println(json.toJSONString());}
}
运行结果

Map和JSON之间的转换
代码示例
package com.zhangb;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author zhangb* @time 0514* @desccription map与json之间的转换*/
public class JsonDemo02 {public static void main(String[] args) {mapToJson();}private static void mapToJson(){//新建一个mapMap<String,Object> map = new HashMap<>();map.put("status",0);map.put("desc","成功");//新建listList<Map<String,Object>> mapList = new ArrayList<>();Map<String,Object> obj = new HashMap<>();obj.put("name","zhangb");obj.put("sex","男");obj.put("desc","JSON教程");mapList.add(obj);Map<String,Object> mobj = new HashMap<>();mobj.put("name","lidan");mobj.put("sex","女");mobj.put("desc","测试");mapList.add(mobj);//将maplist加入map中map.put("data",mapList);//将map转换成jsonJSONObject jsonObject = JSONObject.fromObject(map);//alibaba将map转化为json ,各种方法String str = JSON.toJSONString(map);com.alibaba.fastjson.JSONObject str1 = new com.alibaba.fastjson.JSONObject(map);String str2 = new com.alibaba.fastjson.JSONObject().toJSONString(map);System.out.println("json-lib的map to json");System.out.println(jsonObject);System.out.println("Fastjson的map to json");System.out.println(str);System.out.println(str1);System.out.println(str2);}}
输出结果

实体转换成json
代码示例
package com.zhangb;import com.alibaba.fastjson.JSON;
import com.zhangb.Entity.BaseEntity;
import com.zhangb.Entity.Person;
import net.sf.json.JSONObject;import javax.swing.text.html.parser.Entity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author zhangb* @time 0514* @desccription 实体与json之间的转换*/
public class JsonDemo03 {public static void main(String[] args) {entityToJson();}private static void entityToJson(){BaseEntity baseEntity = new BaseEntity();baseEntity.setStatus("0");baseEntity.setDesc("成功");List<Person> list = new ArrayList<>();Person p = new Person();p.setName("zhangb");p.setSex("男");p.setDescription("JSON培训");list.add(p);Person p1 = new Person();p1.setName("lidan");p1.setSex("女");p1.setDescription("测试");list.add(p1);//实体封装完成baseEntity.setData(list);// Json lib的转换方法JSONObject jsonObject = JSONObject.fromObject(baseEntity);// FastJson的转换方法String jsonObject1 = new com.alibaba.fastjson.JSONObject().toJSONString(baseEntity);//也可以反着来JSON串转实体对象BaseEntity baseEntity1 = JSON.parseObject(jsonObject1,BaseEntity.class);System.out.println("json-lib的实体 to json");System.out.println(jsonObject);System.out.println("Fastjson的实体 to json");System.out.println(jsonObject1);}}
输出结果

Json的解析
代码示例,两者我写到了一起,基本上就是细微差别
package com.zhangb;import com.alibaba.fastjson.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;/*** @author zhangb* @time 0514* @desccription json的解析*/
public class JsonDemo04 {public static void main(String[] args) {getJson();}/*** 采用字符串拼接json* 此处注意转义符*/private static String setJson(){String str = "{\"status\":0,\"desc\":\"成功\",\"data\":[{\"name\":\"zhangb\",\"sex\":\"男\",\"description\":\"JSON教程\"},{\"name\":\"lidan\",\"sex\":\"女\",\"description\":\"测试\"}]}";System.out.println("输出字符串拼接的json");System.out.println(str);return str;}private static void getJson(){String str = setJson();//json lib格式化JSONObject jsonObject = JSONObject.fromObject(str);String status = jsonObject.getString("status");String desc = jsonObject.getString("desc");JSONArray jsonArray = jsonObject.getJSONArray("data");System.out.println("状态:"+status);System.out.println("描述:"+desc);for (int i=0;i< jsonArray.size();i++){JSONObject json = jsonArray.getJSONObject(i);String name = json.getString("name");String sex = json.getString("sex");String description = json.getString("description");System.out.println("name:"+name+"sex"+sex+"description:"+description);}System.out.println("阿里巴巴解析json!");//阿里巴巴json格式化com.alibaba.fastjson.JSONObject jsonObject1 = JSON.parseObject(str);String status1 = jsonObject.getString("status");String desc1 = jsonObject.getString("desc");com.alibaba.fastjson.JSONArray jsonArray1 = jsonObject1.getJSONArray("data");for (int i= 0; i< jsonArray1.size();i++){com.alibaba.fastjson.JSONObject jsonObject2 = jsonArray1.getJSONObject(i);String name = jsonObject2.getString("name");String sex = jsonObject2.getString("sex");String description = jsonObject2.getString("description");System.out.println("name:"+name+"sex"+sex+"description:"+description);}System.out.println("状态:"+status1);System.out.println("描述:"+desc1);}}
运行结果

相关代码已经提交到我的git,感兴趣的同学可以自行下载
GIT地址:https://github.com/moshushow/JsonDemo
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
