JSON的三种解析方式以及JSONObject、Map、JSONArray、ArrayList的区别

一、JSON

1. 什么是JSON?

JSON是一种取待XML的数据结构,和xml相比,它更小但描述能力却不差,由于它的小巧,所以网络传输数据将减少更多流量从而加快速度。
JSON就是一串字符串,只不过元素会使用特定的符号标注。键值对的方式,属性必须加双引号。
{} 双括号表示对象
[] 中括号表示数组
"" 双引号内是属性或值
: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是个数组或者对象)
所以{“name”:“Michal”}可以理解为是一个包含name为MInchal的对象
而[{“name”:“Michael”},{“name”:“Jerry”}]就表示包含两个对象的数组

2. JSON字符串和JSON对象的区别

Json对象

  • 最显著的特征:对象的值可以用“对象.属性”进行访问;
  • typrOf(json对象)===> Object类型
  • 例子如下:
var person={"name":"shily","sex":"女","age":"23"}//json对象
console.log(person);
console.log(person.name);
console.log(typeof person);

输出结果是:
在这里插入图片描述
Json字符串(所谓字符串:单引号或者双引号引起来)

  • 例子如下:
 var person='{"name":"shily","sex":"女","age":"23"}';//json字符串
console.log(person)
console.log(person.name)
console.log(typeof person)

输出结果为:
在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/2020070818014140.png
Json对象与Json字符串的相互转化

  • Json字符串转化为Json对象 JSON.parse()
var str='{"name":"shily","sex":"女","age":"23"}';
var strToObj=JSON.parse(str);
console.log(strToObj);
console.log(typeof strToObj);
console.log(strToObj.name)

输出结果为:

  • Json对象转Json字符串 JSON.stringify()
var obj={"name":"shily","sex":"女","age":"23"}//json对象
var objToStr=JSON.stringify(obj);
console.log(objToStr);
console.log(typeof objToStr)

输出结果为:
在这里插入图片描述

3. JSON解析

  • .生成json字符串
public static String createJsonString(String key, Object value) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put(key, value);
        return jsonObject.toString();
}

put() 方法的第一个参数为 key 值,必须为 String 类型,第二个参数为 value,可以为 boolean、double、int、long、Object、Map 以及 Collection 等。当然,double 以及 int 等类型只是在 Java 中,写入到 json 中时,统一都会以 Number 类型存储

  • 使用HashMap构建
    使用HashMap构建json,实际上即先创建好一个HashMap对象并且将数据打包进去,而后在创建JsonObject时将其作为一个参数传进去
Map<String,Object> data=new HashMap<String,Object>
data.put("name","John");
data.put("sex","male");
data.put("age",22);
data.put("is_student",true)
JSONObject obj=new JSONObject(data);

//或者下面的这种写法,将java对象转换为json对象
JSONObject obj=JSONObject.fromObject(data);
fromObjectparseObject的区别
虽然都是返回JSONObject,但是:

JSONObject.parseObject(jsonStr);这个方法需要导入import com.alibaba.fastjson.JSONObject;
JSONObject.fromObject(jsonStr);这个方法需要导入import net.sf.json.JSONObject;

一般都是是用parseObject()

  • 解析json
    只要是基本类型Number、boolean等,与数组Array
    基本类型的解析直接调用JSONObject对象的getXxx(key)方法,如果是获取字符串则getString(key),布尔值则是getBoolean(key)

只包含一个对象的json字符串解析

//将得到json数据转换为一个json对象
JSONObject jsonObject=new JSONObject("data");
//获取persons的json对象
jsonObject=jsonObject.getJSONObject("persons");
//通过相应的get方法,获取其相应的属性
int id=jsonObject.getInt("id");
总结一句就是:
JSONObject jsonObject=new JSONObject("data").getJSONObject("persons")..getInt("id")

String name=jsonObject.getString("name")
//将获取到的数据放到一个person对象中
Person person=new  Person(id,name);

含有多个对象的json字符串解析

List<Person> list=new  ArrayList<>();
//将得到的json数据转化成一个json对象
JSONObject jsonObject=new  JSONObject("data");
//获取persons的json对象,并将其转化为一个json数组
JSONArray array=jsonObject.getJsonArray("persons");
//通过循环获取数据,并放入list集合中
for(int i=0;i<array.length();i++){

int id=array.getJSONObject(i).getInt("id");
String name=array.getJSONObject(i).getString("name");
Person person=new Person(id,name);
list.add(person);
}
return list;
  • 进场实体转JSONObject

实体对象转换成Json字符串

   String s = JSONObject.toJSONString(entryApplication);

Json字符串转为JSONObject对象

JSONObject json = JSONObject.parseObject(s);
  • JSONArray转List
    **加粗样式**

4. 举例说明

[{name1:{name2:{name3:‘value1’,name4:‘value2’}}},{}]
对于这种json嵌套,只要记住符号“ :” 前是键后是值,大括号成对找,一层层拨开就清楚了。例子中就是一个数组,数据里面有两个json格式的字符串。如果我们想取出name4的值。
思路步骤:

  1. 将以上字符串转换为JSONArray对象
  2. 取出对象的第一项 JSONObject对象;
  3. 取出name1的值JSONObject对象
  4. 取出name2的值JSONObject对象
  5. 取出name4的值value2
  6. 示例中json数组格式的字符串可以通过方法直接转换为JSONArray的格式:
    JSONArray.fromObject(String)
JSONArray getJsonArray=JSONArray.fromObject(arrayStr)//将结果转换成JSonArray对象
JSONObject getJsonObj=getJsonArray.getObject(0)
String result=getJsonObj.getJSONObject("name1").getJSONObject("name2").getString("name4");

1,JSONObject
json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value}
2,JSONArray
Json数组,使用中括号[ ],只不过数组里面的项也是json键值对格式的
Json对象中添加的是键值对,JSONArray中添加的是Json对象
JSONObject Json = new JSONObject();
JSONArray JsonArray = new JSONArray();

Json.put(“key”, “value”);//JSONObject对象中添加键值对
JsonArray.add(Json);//将JSONObject对象添加到Json数组中

二、JSON和Map、JSONArray和ArrayList的区别

JSON 和 Map

{"name":"Casey", "age":23, "job":"Teacher"}
{name = Casey, age = 23, job = Teacher}

JSONArray和ArrayList

[{"name":"Casey", "age":23}, {"name":"Allen", "age":25}]
[{name = Casey, age = 23}, {name = Allen, age = 25}]

参考:
json对象和json字符串的区别(https://www.cnblogs.com/wxh0929/p/11132073.html)
解析json(https://blog.csdn.net/qq_32253371/article/details/78083391)

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值