Android json解析有关内容学*笔记

发布时间:2021-07-31 11:43:17

毋庸置疑,Json是当下最主流最受欢迎的数据交换格式,得益于json的简单易用,一直没有系统的学*有关json的知识,总是一知半解,所以想整理一下json相关的学*内容。文档中指出,json是一种轻量级的具有良好的可读性和便于快速编写的的交换格式,获得当今大多数语言的支持,可在不同*台上进行数据交换,比较理想,正因为其种种优良特性使得其很快取代了xml。

所有的json相关资料*惯性的都会列出json和xml的对比,那好我也copy过来



优点:


比xml格式简单;
json是更好的数据交换格式;xml是更好的文档交换格式;
json更易于机器阅读,使用简单的客户端库或者自身支持(javascript);
json可被浏览器客户端支持;
可支持各种通用的数据结构,记录、列表、树;
21种语言支持可解析和生成json格式
缺点:


没有xml中类似CDATA的特性,不适合传递声音和图片等二进制数据;
json不具备显示能力,和xml相比;
json不可扩展,和xml相比。


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------


前段时间看阮一峰的博客,一篇写到有关数据类型和json的内容,觉得说的非常好,把一些概念性的东西通俗易懂的讲了出来,很容易理解,内容如下:


从结构上看,所有的数据最终都可以分解成三种类型:


第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。


第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海"。


第三种类型是映射(mapping),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比 如"首都:北京"。


数据构成的最小单位原来如此简单!难怪在编程语言中,只要有了数组(array)和对象(object)就能够储存一切数据了。


Json的规格非常简单,只用一个页面几百个字就能说清楚,而且这个规格永远不必升级,因为该规定的都规定了。


1) 并列的数据之间用逗号(",")分隔。


2) 映射用冒号(":")表示。


3) 并列数据的集合(数组)用方括号("[]")表示。


4) 映射的集合(对象)用大括号("{}")表示。


上面四条规则,就是Json格式的所有内容。



-----------------------------------------------------------------------------------------------------------------------------------------------------------------


看过一些介绍android json参考资料后,打算自己动手尝试去写写解析json的例子,在代码中遇到的问题才会印象更深刻,将两个demo集合在一起,两个解析的方式都是相同的,只是构建json的时候不同而已:一种是在tomcat上放置一个jsp文件,里面用json的格式描述的一些列字符串,然后去解析还原出来;另一种是在代码中构建json格式之后再进行解析,下面PO的是主要一些代码:


放在tomcat上的jsp文件json.jsp,按照json的格式描述的一段字符串:


<%@ page contentType="text/html;charset=GBK"%>
{"Race" : "侏儒", "Name" : "辛德瑞拉嘟嘟", "Profession" : "法师",
"Server" :{"Server_region":"二区","Server_name":"阿古斯"},
"Talent" : ["奥术","火焰"], "Achievement_Point" : 12090,
"P_Skill" : ["工程学","附魔"], "L_Skill" : ["急救","烹饪","考古学","钓鱼"],
"Profession" : "法师" }



package com.eyu.json;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class HttpUtil {
public static HttpClient httpClient = new DefaultHttpClient();

public static String getRequest(String url) throws ParseException, IOException{
//创建httpGet对象
HttpGet httpGet = new HttpGet(url);
//发送Get请求
HttpResponse httpResponse = httpClient.execute(httpGet);
//如果服务器成功的返回响应
if(httpResponse.getStatusLine().getStatusCode()==200){
//获取服务器响应字符串
String result = EntityUtils.toString(httpResponse.getEntity());
return result;
}
return null;
}



public static String postRequest(String url,Map rawParams) throws ClientProtocolException, IOException{
//创建httpPost对象
HttpPost httpPost = new HttpPost(url);
//如果传递参数比较多,可以对传递的参数进行封装
List params = new ArrayList();
for(String key : rawParams.keySet()){
//封装请求参数
params.add(new BasicNameValuePair(key, rawParams.get(key)));
}

//发送post请求
HttpResponse httpResponse = httpClient.execute(httpPost);
//如果服务器成功的返回响应
if(httpResponse.getStatusLine().getStatusCode()==200){
//获取服务器响应字符串
String result = EntityUtils.toString(httpResponse.getEntity());
return result;
}

return null;
}
}



...............
String result = null;
try {
result = HttpUtil.getRequest("http://10.0.2.2:8080/jsontest/json.jsp");
Log.i("PDA", "result-------->" + result);
} catch (Exception e) {e.printStackTrace();}

JSONObject jsonObject = new JSONObject(result);
txt_Name = (TextView) findViewById(R.id.txt_Name);
txt_Name.setText(jsonObject.getString("Name"));

txt_Race = (TextView) findViewById(R.id.txt_Race);
txt_Race.setText(jsonObject.getString("Race"));

txt_Profession = (TextView) findViewById(R.id.txt_Profession);
txt_Profession.setText(jsonObject.getString("Profession"));

txt_ServerMsg = (TextView) findViewById(R.id.txt_ServerMsg);
txt_ServerMsg.setText(jsonObject.getJSONObject("Server").getString("Server_region")+","+jsonObject.getJSONObject("Server").getString("Server_name"));

txt_Talent = (TextView) findViewById(R.id.txt_Talent);
txt_Talent.setText(jsonObject.getJSONArray("Talent").getString(0)+","+jsonObject.getJSONArray("Talent").getString(1));
............................


---------------------------------------------------------------------------------------------------------------------------------------------------------------------



另外一种是直接构建json对象:


//创建一个json对象
jsonObject = new JSONObject();

//字符串值放入jsonObject中
jsonObject.put("Name", "辛德瑞拉点点");
jsonObject.put("Race", "人类");
jsonObject.put("Profession", "死亡骑士");

//服务器的信息的值是对象,故创建一个对象,然后添加到jsonObject对象中
JSONObject serverMsg = new JSONObject();
serverMsg.put("Server_region", "二区");
serverMsg.put("Server_name", "阿古斯");
jsonObject.put("Server", serverMsg);

//天赋信息的值是数组,故创建一个数组,然后添加到jsonObject对象中
JSONArray talent = new JSONArray();
talent.put("鲜血").put("冰霜");
jsonObject.put("Talent", talent);

//整数值放入jsonObject中
jsonObject.put("Achievement_Point", 12090);
...............................

之后的解析方式是一样的。


以下是解析之后的效果图:




虽然现在不常会用到Json解析,但这种数据交换方式一定要掌握才好~!














相关资源:Android XML和JSON解析代码

相关文档

  • AVL树的 java 代码实现
  • 如何正确有效的学习电脑程序
  • 如何办理个体工商户营业执照
  • 幼儿园小班数学活动教案《图形娃娃找家》含反思
  • 月季花秋天开花吗
  • 他们已经老去
  • weka决策树结果怎么看_位移比剪重比框弯比等各种参数在软件设计结果中应该怎么看?...
  • 怎样用photoshop修改完美脸型?
  • 高中毕业自我鉴定干货9篇
  • 学校学雷锋运动总结范文
  • 青少年怎样祛斑最快最有效
  • Mac 使用VS Code 通过cmake 配置 OpenCV和Pytorch C++ API
  • 专票和普票的区别是什么
  • HTML&CSS--使用CSS完成页面布局及排版(附案例代码)
  • 企业优秀员工获奖感言模板
  • 2014年全国大学法学专业排名
  • 自然语言处理是什么,我们为什么需要处理自然语言?
  • 木梳子的清洗保养秘诀与方法
  • 初一冬季学生评语
  • 收缩型资本运营模式
  • 家庭居室装饰装修工程施工协议书范文
  • 申请留学美国的研究生院奖学金的条件及注意事项有哪些
  • 华为nova5z怎么分屏
  • 那一处束严厉的目光
  • 飞桨分布式训练又推新品,4D混合并行可训千亿级AI模型
  • 元宵节灯谜集锦
  • 五行属土和水的男孩名字有哪些
  • 初中班主任操行评语
  • 【LeetCode】53. 最大子序和
  • 电脑连接有密码忘记了怎么办
  • 猜你喜欢

  • 高一散文:有时,坚强抑或是一种脆弱
  • 人力资源管理师二级人力资源规划讲义PPT课件
  • 环氧树脂耐磨地面涂料的涂装工艺研究
  • 盐酸利托君与硫酸镁治疗先兆早产的疗效对比观察
  • 三创赛优秀作品_【喜讯】震撼人心!我院斩获“三创赛”省赛一等奖
  • 2019-2020学年八年级数学上册《勾股定理的应用》教案 (新版)苏科版.doc
  • 采购经理工作计划范例
  • 码头船舶建造安全管理规定
  • 新笑傲江湖手游如何用电脑玩 新笑傲江湖手游PC电脑版玩法教程
  • 国际财务部经理年终工作总结范文
  • 刚安装maven后,编译项目时报错:插件org.apache.maven.plugins:maven-resources-plugin:2.6或其中一个依赖项无法解决......
  • 【中小学资料】2018版高中化学 第3章 烃的含氧衍生物 第4节 有机合成学案 新人教版选修5
  • 大学生就业需职业规划
  • 西蒙斯学院与三一学院本开萄е柿慷员
  • 瑞典aco防晒霜怎么样?aco防晒霜好用吗?
  • 油田管道防腐层检测技术及管道维护探析
  • 钢筋加工场安全技术交底
  • 餐饮连锁经营物流配送管理手册物流运输仓储管理
  • 直螺纹钢筋机械连接质量卡控细则及工序卡控表
  • 社会大众精神文化生活现状调查问卷
  • 2019-2020年重点小学一年级语文下学期期中考试试卷新人教版 含答案
  • 研究基于spring对http请求数据的预处理(数据加解密、校验、日志)(1)过滤器篇
  • 九语文教案-第一次作文:人物细节描写的方法
  • 小学四年级叙事作文:我的愿望
  • 结婚的人做什么工作怎么办
  • 000PAC_PAM复合絮凝剂对某镇生活污水处理效率的实验研究(1)
  • 数据录入及维护服务合同范本
  • SMT QA作业规则
  • 2019秋人教版九年级物理上册作业课件:专题精炼 串联和并联电路作图(共16张PPT)教育精品.ppt
  • 保卫祖国的诗歌
  • 2013广东会计电算化考试试题多选题和判断题精选(26)
  • 那一刻
  • 实验小学学校五年发展规划共6页文档
  • 企业文化的最高境界(精品范文).doc
  • 道德宣传日黑板报资料
  • 环保水性涂料投资建设项目投资计划书范文
  • 砼与砌体施工监理细则
  • 【新教材】人教版(PEP)四年级英语上册Unit5 Dinner is ready PartA_Let's_learn精品公开课课件
  • 【K12教育学*资料】高中数学第1章立体几何初步1.1_1.1.4直观图画法练*苏教版必修2
  • 整合不动产登记职责建立统一登记制度
  • Photoshop笔刷安装
  • 避雷针安装高度及保护范围设计计算
  • 电脑版