最后
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
腾讯、字节跳动、阿里、百度等BAT大厂 2019-2021面试真题解析
资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
-
.endObject()
-
.toString();
String myString = new JSONStringer().object() .key(“name”) .value(“小猪”) .endObject() .toString();
结果是一组标准格式的JSON text:{“name” : “小猪”}
其中的.object()和.endObject()必须同时使用,是为了按照Object标准给数值添加边界。同样,针对数组也有一组标准的方法来生成边界.array()和.endArray()。
(4)JSONTokener:
这个是系统为JSONObject和JSONArray构造器解析JSON source string的类,它可以从source string中提取数值信息。
JSONException:是JSON.org类抛出的异常信息。
下面引用一个完整的应用实例:
应用JSONObject存储Map类型数值:
-
public static JSONObject getJSON(Map map) {
-
Iterator iter = map.entrySet().iterator();
-
JSONObject holder = new JSONObject();
-
while (iter.hasNext()) {
-
Map.Entry pairs = (Map.Entry) iter.next();
-
String key = (String) pairs.getKey();
-
Map m = (Map) pairs.getValue();
-
JSONObject data = new JSONObject();
-
try {
-
Iterator iter2 = m.entrySet().iterator();
-
while (iter2.hasNext()) {
-
Map.Entry pairs2 = (Map.Entry) iter2.next();
-
data.put((String) pairs2.getKey(), (String) pairs2
-
.getValue());
-
}
-
holder.put(key, data);
-
} catch (JSONException e) {
-
Log.e(“Transforming”, “There was an error packaging JSON”, e);
-
}
-
}
-
return holder;
-
}
public static JSONObject getJSON(Map map) { Iterator iter = map.entrySet().iterator(); JSONObject holder = new JSONObject(); while (iter.hasNext()) { Map.Entry pairs = (Map.Entry) iter.next(); String key = (String) pairs.getKey(); Map m = (Map) pairs.getValue(); JSONObject data = new JSONObject(); try { Iterator iter2 = m.entrySet().iterator(); while (iter2.hasNext()) { Map.Entry pairs2 = (Map.Entry) iter2.next(); data.put((String) pairs2.getKey(), (String) pairs2 .getValue()); } holder.put(key, data); } catch (JSONException e) { Log.e(“Transforming”, “There was an error packaging JSON”, e); } } return holder; }
下面是详细的例子:
-
import java.io.ByteArrayOutputStream;
-
import java.io.InputStream;
-
import java.net.*;
-
import java.util.ArrayList;
-
import java.util.HashMap;
-
import java.util.List;
-
import java.util.Map;
-
import org.json.JSONArray;
-
import org.json.JSONObject;
-
import android.util.Log;
-
public class JSON {
-
/**
-
* 获取"数组形式"的JSON数据,
-
* 数据形式:[{“id”:1,“name”:“小猪”},{“id”:2,“name”:“小猫”}]
-
* @param path 网页路径
-
* @return 返回List
-
* @throws Exception
-
*/
-
public static List<Map<String, String>> getJSONArray(String path) throws Exception {
-
String json = null;
-
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
-
Map<String, String> map = null;
-
URL url = new URL(path);
-
HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 利用HttpURLConnection对象,我们可以从网络中获取网页数据.
-
conn.setConnectTimeout(5 * 1000); // 单位是毫秒,设置超时时间为5秒
-
conn.setRequestMethod(“GET”); // HttpURLConnection 是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET
-
if (conn.getResponseCode() == 200) {// 判断请求码是否是200码,否则失败
-
InputStream is = conn.getInputStream(); // 获取输入流
-
byte[] data = readStream(is); // 把输入流转换成字符数组
-
json = new String(data); // 把字符数组转换成字符串
-
//数据形式:[{“id”:1,“name”:“小猪”,“age”:22},{“id”:2,“name”:“小猫”,“age”:23}]
-
JSONArray jsonArray = new JSONArray(json); //数据直接为一个数组形式,所以可以直接 用android提供的框架JSONArray读取JSON数据,转换成 Array
-
for (int i = 0; i < jsonArray.length(); i++) {
-
JSONObject item = jsonArray.getJSONObject(i); //每条记录又由几个Object对象组成
-
int id = item.getInt(“id”); // 获取对象对应的值
-
String name = item.getString(“name”);
-
map = new HashMap<String, String>(); // 存放到MAP里面
-
map.put(“id”, id + “”);
-
map.put(“name”, name);
-
list.add(map);
-
}
-
}
-
// ***********测试数据******************
-
for (Map<String, String> list2 : list) {
-
String id = list2.get(“id”);
-
String name = list2.get(“name”);
-
Log.i(“abc”, “id:” + id + " | name:" + name);
-
}
-
return list;
-
}
-
/**
-
* 获取"对象形式"的JSON数据,
-
* 数据形式: {“total”:2,“success”:true,“arrayData”:[{“id”:1,“name”:“小猪”}, {“id”:2,“name”:“小猫”}]}
-
* @param path 网页路径
-
* @return 返回List
-
* @throws Exception
-
*/
-
public static List<Map<String, String>> getJSONObject(String path) throws Exception {
-
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
-
Map<String, String> map = null;
-
URL url = new URL(path);
-
HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 利用HttpURLConnection对象,我们可以从网络中获取网页数据.
-
conn.setConnectTimeout(5 * 1000); // 单位是毫秒,设置超时时间为5秒
-
conn.setRequestMethod(“GET”); // HttpURLConnection 是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET
-
if (conn.getResponseCode() == 200) {// 判断请求码是否是200码,否则失败
-
InputStream is = conn.getInputStream(); // 获取输入流
-
byte[] data = readStream(is); // 把输入流转换成字符数组
-
String json = new String(data); // 把字符数组转换成字符串
-
//数据形式: {“total”:2,“success”:true,“arrayData”:[{“id”:1,“name”:“小猪”}, {“id”:2,“name”:“小猫”}]}
-
JSONObject jsonObject=new JSONObject(json); //返回的数据形式是一个Object类型,所以可以直接转换成一个Object
-
int total=jsonObject.getInt(“total”);
-
Boolean success=jsonObject.getBoolean(“success”);
-
Log.i(“abc”, “total:” + total + " | success:" + success); //测试数据
-
JSONArray jsonArray = jsonObject.getJSONArray(“arrayData”);// 里面有一个数组数据,可以用getJSONArray获取数组
-
for (int i = 0; i < jsonArray.length(); i++) {
-
JSONObject item = jsonArray.getJSONObject(i); // 得到每个对象
-
int id = item.getInt(“id”); // 获取对象对应的值
-
String name = item.getString(“name”);
-
map = new HashMap<String, String>(); // 存放到MAP里面
-
map.put(“id”, id + “”);
-
map.put(“name”, name);
-
list.add(map);
-
}
-
}
-
// ***********测试数据******************
-
for (Map<String, String> list2 : list) {
-
String id = list2.get(“id”);
-
String name = list2.get(“name”);
-
Log.i(“abc”, “id:” + id + " | name:" + name);
-
}
-
return list;
-
}
-
/**
-
* 获取类型复杂的JSON数据
-
*数据形式:
-
{“name”:“小猪”,
-
“age”:23,
-
“content”:{“questionsTotal”:2,
-
“questions”: [ { “question”: “what’s your name?”, “answer”: " 小猪"},{“question”: “what’s your age”, “answer”: “23”}]
-
}
-
}
-
* @param path 网页路径
-
* @return 返回List
-
* @throws Exception
-
*/
-
public static List<Map<String, String>> getJSON(String path) throws Exception {
-
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
-
Map<String, String> map = null;
-
URL url = new URL(path);
-
HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 利用HttpURLConnection对象,我们可以从网络中获取网页数据.
-
conn.setConnectTimeout(5 * 1000); // 单位是毫秒,设置超时时间为5秒
-
conn.setRequestMethod(“GET”); // HttpURLConnection 是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET
-
if (conn.getResponseCode() == 200) {// 判断请求码是否是200码,否则失败
-
InputStream is = conn.getInputStream(); // 获取输入流
-
byte[] data = readStream(is); // 把输入流转换成字符数组
-
String json = new String(data); // 把字符数组转换成字符串
-
/*数据形式:
-
{“name”:“小猪”,
-
“age”:23,
-
“content”:{“questionsTotal”:2,
-
“questions”: [ { “question”: “what’s your name?”, “answer”: " 小猪"},{“question”: “what’s your age”, “answer”: “23”}]
-
}
-
}
-
*/
-
JSONObject jsonObject=new JSONObject(json); //返回的数据形式是一个Object类型,所以可以直接转换成一个Object
-
String name=jsonObject.getString(“name”);
-
int age=jsonObject.getInt(“age”);
最后
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
欢迎大家一起交流讨论啊~
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
int age=jsonObject.getInt(“age”);
最后
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
[外链图片转存中…(img-pnQ56jhp-1714817427697)]
欢迎大家一起交流讨论啊~
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!