IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 代码分析(九) -> 正文阅读

[JavaScript知识库]代码分析(九)

2021SC@SDUSC

上次分析了使用频繁的JSONObject,这次分析一下使用同样多的JSONArray。

public class JSONArray extends JSON implements List<Object>, Cloneable, RandomAccess, Serializable 

同样的,这个了同样是fastjson里面的一个类,同样实现了Cloneable, Serializable ,不同的是,它实现了RandomAccess。

RandomAccess:

根据javadoc的解释,RandomAccess 是一个标记接口,用于标明实现该接口的List支持快速随机访问,主要目的是使算法能够在随机和顺序访问的list中表现的更加高效。

     for (int i=0, n=list.size(); i < n; i++)
         list.get(i);
 
runs faster than this loop:
     for (Iterator i=list.iterator(); i.hasNext(); )
         i.next();

也就是说实现RandomAccess接口的的List可以通过简单的for循环来访问数据比使用iterator访问来的高效快速。
然后回到我们当前,我么你先看一下这个快速在我们APIJSON里面的具体体现:

public static JSONArray format(final JSONArray array) {
		//太长查看不方便,不如debug	 Log.i(TAG, "format  array = \n" + JSON.toJSONString(array));
		if (array == null || array.isEmpty()) {
			Log.i(TAG, "format  array == null || array.isEmpty() >> return array;");
			return array;
		}
		JSONArray formatedArray = new JSONArray();

		Object value;
		for (int i = 0; i < array.size(); i++) {
			value = array.get(i);
			if (value instanceof JSONArray) {//JSONArray,遍历来format内部项
				formatedArray.add(format((JSONArray) value));
			}
			else if (value instanceof JSONObject) {//JSONObject,往下一级提取
				formatedArray.add(format((JSONObject) value));
			}
			else {//其它Object,直接填充
				formatedArray.add(value);
			}
		}

这个方法的作用就是去格式化key名称,首先传入一个JSONArray的对象,然后在从array里面取出数据的时候,便体现了它快速的点,我们遍历这个for循环时,便可以比Iterater还要快,然后分别取出数据放入到新创建的JSONArray里面,最后再返回此对象。
我们可以看一下这个类中的一些经典的方法:

private void readObject(final java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
        JSONObject.SecureObjectInputStream.ensureFields();
        if (JSONObject.SecureObjectInputStream.fields != null && !JSONObject.SecureObjectInputStream.fields_error) {
            ObjectInputStream secIn = new JSONObject.SecureObjectInputStream(in);
            try {
                secIn.defaultReadObject();
                return;
            } catch (java.io.NotActiveException e) {
                // skip
            }
        }

        in.defaultReadObject();
        for (Object item : list) {
            if (item == null) {
                continue;
            }

            String typeName = item.getClass().getName();
            if (TypeUtils.getClassFromMapping(typeName) == null) {
                ParserConfig.global.checkAutoType(typeName, null);
            }
        }
    }

这里使用了一个对象输入流作为参数,然后经过在fastjson里面定义的SecureObjectInputStream类进行了一个转化,主要是增加了一些判断,如果JSONObject.SecureObjectInputStream.fields_error为true,那么便存在异常,诸如此类的一些判定,然后就是读取这个对象流的内容。

而我们这个JSONArray类和JSONObject类投什么关联呢?

  • (一) java处理 json格式字符串 : 转成 JSONArray 或 JSONObject 类型
    1 如果是JSONArray ,格式: 最外层是 中括号,表示数组
 格式 :  [{key:value},{key:value}... ]
    	   ["str1","str2","str3",...]
    	   
语法:   JSONArray array = JSONArray.parseArray(strs)
这里注意:     strs 必须是json格式的字符串, 以"[  ]"中括号开头结尾. 否则会报错.
2  如果是JSONObject ,格式:  最外层是大括号,表示对象
格式: 	{key:value}
语法: 	JSONObject result = JSONArray.parseObject(strs );
  • (二)JSONArray 和 JSONObject 可以相互嵌套
    1 JSONArray 添加 JSONObject
    语法: JSONArray.add(JSONObject );
格式:  [{
			 	"key": "value",
				"key": "value"
	   }]

2 JSONObject 添加 JSONArray
语法: JSONObject.put(JSONArray);

格式:  
		"key": {
			"key": "value",
			"key":[ 
				"value"
			]
		}

——
关于JSONObject和JSONArray之间的关系,由于原本是不同的组员负责的内容,秉持着队友协作完成的理念,所以我和组员讨论了好久去判断他们的关系与相互作用,直到最后发现上网查资料是一部分,更多的要看我们实际的实践操作,我们直接利用postman等相关软件直接进行一些相关的测试,测试结果便很明显的表明了它们之间的关系和作用。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:09:45  更:2021-12-06 15:12:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:28:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码