2024年Android中的JSON详细讲解,2024年Android常见面试题目

最后

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

腾讯、字节跳动、阿里、百度等BAT大厂 2019-2021面试真题解析

资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  1. .endObject()

  2. .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类型数值:

view plain print ?

  1. public static JSONObject getJSON(Map map) {

  2. Iterator iter = map.entrySet().iterator();

  3. JSONObject holder = new JSONObject();

  4. while (iter.hasNext()) {

  5. Map.Entry pairs = (Map.Entry) iter.next();

  6. String key = (String) pairs.getKey();

  7. Map m = (Map) pairs.getValue();

  8. JSONObject data = new JSONObject();

  9. try {

  10. Iterator iter2 = m.entrySet().iterator();

  11. while (iter2.hasNext()) {

  12. Map.Entry pairs2 = (Map.Entry) iter2.next();

  13. data.put((String) pairs2.getKey(), (String) pairs2

  14. .getValue());

  15. }

  16. holder.put(key, data);

  17. } catch (JSONException e) {

  18. Log.e(“Transforming”, “There was an error packaging JSON”, e);

  19. }

  20. }

  21. return holder;

  22. }

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; }

下面是详细的例子:

view plain print ?

  1. import java.io.ByteArrayOutputStream;

  2. import java.io.InputStream;

  3. import java.net.*;

  4. import java.util.ArrayList;

  5. import java.util.HashMap;

  6. import java.util.List;

  7. import java.util.Map;

  8. import org.json.JSONArray;

  9. import org.json.JSONObject;

  10. import android.util.Log;

  11. public class JSON {

  12. /**

  13. * 获取"数组形式"的JSON数据,

  14. * 数据形式:[{“id”:1,“name”:“小猪”},{“id”:2,“name”:“小猫”}]

  15. * @param path  网页路径

  16. * @return  返回List

  17. * @throws Exception

  18. */

  19. public static List<Map<String, String>> getJSONArray(String path) throws Exception {

  20. String json = null;

  21. List<Map<String, String>> list = new ArrayList<Map<String, String>>();

  22. Map<String, String> map = null;

  23. URL url = new URL(path);

  24. HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 利用HttpURLConnection对象,我们可以从网络中获取网页数据.

  25. conn.setConnectTimeout(5 * 1000);   // 单位是毫秒,设置超时时间为5秒

  26. conn.setRequestMethod(“GET”);       // HttpURLConnection 是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET

  27. if (conn.getResponseCode() == 200) {// 判断请求码是否是200码,否则失败

  28. InputStream is = conn.getInputStream(); // 获取输入流

  29. byte[] data = readStream(is);   // 把输入流转换成字符数组

  30. json = new String(data);        // 把字符数组转换成字符串

  31. //数据形式:[{“id”:1,“name”:“小猪”,“age”:22},{“id”:2,“name”:“小猫”,“age”:23}]

  32. JSONArray jsonArray = new JSONArray(json); //数据直接为一个数组形式,所以可以直接 用android提供的框架JSONArray读取JSON数据,转换成 Array

  33. for (int i = 0; i < jsonArray.length(); i++) {

  34. JSONObject item = jsonArray.getJSONObject(i); //每条记录又由几个Object对象组成

  35. int id = item.getInt(“id”);     // 获取对象对应的值

  36. String name = item.getString(“name”);

  37. map = new HashMap<String, String>(); // 存放到MAP里面

  38. map.put(“id”, id + “”);

  39. map.put(“name”, name);

  40. list.add(map);

  41. }

  42. }

  43. // ***********测试数据******************

  44. for (Map<String, String> list2 : list) {

  45. String id = list2.get(“id”);

  46. String name = list2.get(“name”);

  47. Log.i(“abc”, “id:” + id + " | name:" + name);

  48. }

  49. return list;

  50. }

  51. /**

  52. * 获取"对象形式"的JSON数据,

  53. * 数据形式: {“total”:2,“success”:true,“arrayData”:[{“id”:1,“name”:“小猪”}, {“id”:2,“name”:“小猫”}]}

  54. * @param path  网页路径

  55. * @return  返回List

  56. * @throws Exception

  57. */

  58. public static List<Map<String, String>> getJSONObject(String path) throws Exception {

  59. List<Map<String, String>> list = new ArrayList<Map<String, String>>();

  60. Map<String, String> map = null;

  61. URL url = new URL(path);

  62. HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 利用HttpURLConnection对象,我们可以从网络中获取网页数据.

  63. conn.setConnectTimeout(5 * 1000);   // 单位是毫秒,设置超时时间为5秒

  64. conn.setRequestMethod(“GET”);       // HttpURLConnection 是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET

  65. if (conn.getResponseCode() == 200) {// 判断请求码是否是200码,否则失败

  66. InputStream is = conn.getInputStream(); // 获取输入流

  67. byte[] data = readStream(is);   // 把输入流转换成字符数组

  68. String json = new String(data); // 把字符数组转换成字符串

  69. //数据形式: {“total”:2,“success”:true,“arrayData”:[{“id”:1,“name”:“小猪”}, {“id”:2,“name”:“小猫”}]}

  70. JSONObject jsonObject=new JSONObject(json);     //返回的数据形式是一个Object类型,所以可以直接转换成一个Object

  71. int total=jsonObject.getInt(“total”);

  72. Boolean success=jsonObject.getBoolean(“success”);

  73. Log.i(“abc”, “total:” + total + " | success:" + success);   //测试数据

  74. JSONArray jsonArray = jsonObject.getJSONArray(“arrayData”);// 里面有一个数组数据,可以用getJSONArray获取数组

  75. for (int i = 0; i < jsonArray.length(); i++) {

  76. JSONObject item = jsonArray.getJSONObject(i); // 得到每个对象

  77. int id = item.getInt(“id”);     // 获取对象对应的值

  78. String name = item.getString(“name”);

  79. map = new HashMap<String, String>(); // 存放到MAP里面

  80. map.put(“id”, id + “”);

  81. map.put(“name”, name);

  82. list.add(map);

  83. }

  84. }

  85. // ***********测试数据******************

  86. for (Map<String, String> list2 : list) {

  87. String id = list2.get(“id”);

  88. String name = list2.get(“name”);

  89. Log.i(“abc”, “id:” + id + " | name:" + name);

  90. }

  91. return list;

  92. }

  93. /**

  94. * 获取类型复杂的JSON数据

  95. *数据形式:

  96. {“name”:“小猪”,

  97. “age”:23,

  98. “content”:{“questionsTotal”:2,

  99. “questions”: [ { “question”: “what’s your name?”, “answer”: " 小猪"},{“question”: “what’s your age”, “answer”: “23”}]

  100. }

  101. }

  102. * @param path  网页路径

  103. * @return  返回List

  104. * @throws Exception

  105. */

  106. public static List<Map<String, String>> getJSON(String path) throws Exception {

  107. List<Map<String, String>> list = new ArrayList<Map<String, String>>();

  108. Map<String, String> map = null;

  109. URL url = new URL(path);

  110. HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 利用HttpURLConnection对象,我们可以从网络中获取网页数据.

  111. conn.setConnectTimeout(5 * 1000);   // 单位是毫秒,设置超时时间为5秒

  112. conn.setRequestMethod(“GET”);       // HttpURLConnection 是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET

  113. if (conn.getResponseCode() == 200) {// 判断请求码是否是200码,否则失败

  114. InputStream is = conn.getInputStream(); // 获取输入流

  115. byte[] data = readStream(is);   // 把输入流转换成字符数组

  116. String json = new String(data); // 把字符数组转换成字符串

  117. /*数据形式:

  118. {“name”:“小猪”,

  119. “age”:23,

  120. “content”:{“questionsTotal”:2,

  121. “questions”: [ { “question”: “what’s your name?”, “answer”: " 小猪"},{“question”: “what’s your age”, “answer”: “23”}]

  122. }

  123. }

  124. */

  125. JSONObject jsonObject=new JSONObject(json);     //返回的数据形式是一个Object类型,所以可以直接转换成一个Object

  126. String name=jsonObject.getString(“name”);

  127. int age=jsonObject.getInt(“age”);

最后

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

欢迎大家一起交流讨论啊~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

int age=jsonObject.getInt(“age”);

最后

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

[外链图片转存中…(img-pnQ56jhp-1714817427697)]

欢迎大家一起交流讨论啊~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值