Play Open
Loading Please wait Loading Please wait Loading Please wait Loading Please wait Loading Please wait Loading Please wait

史上最全的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或者清空obj

obj.clear();

obj.put("name","lidan");

obj.put("sex","女");

obj.put("desc","测试");

jsonArray.add(obj);

//添加到最开始的json

json.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或者清空obj

obj.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(){

//新建一个map

Map map = new HashMap<>();

map.put("status",0);

map.put("desc","成功");

//新建list

List> mapList = new ArrayList<>();

Map obj = new HashMap<>();

obj.put("name","zhangb");

obj.put("sex","男");

obj.put("desc","JSON教程");

mapList.add(obj);

Map mobj = new HashMap<>();

mobj.put("name","lidan");

mobj.put("sex","女");

mobj.put("desc","测试");

mapList.add(mobj);

//将maplist加入map中

map.put("data",mapList);

//将map转换成json

JSONObject 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 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

Posted in 点球世界杯
Previous
All posts
Next