关闭

关于JSON的一些总结

标签: jsongsonandroid
312人阅读 评论(0) 收藏 举报
分类:

一、关于JSON

Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 
第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。 
第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海"。 
第三种类型是映射(mapping),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"首都:北京"。 
Json的规格非常简单,只用一个页面几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。 
1) 并列的数据之间用逗号(",")分隔。 
2) 映射用冒号(":")表示。 
3) 并列数据的集合(数组)用方括号("[]")表示。 
4) 映射的集合(对象)用大括号("{}")表示。


二、常见的JSON解析方法

解析JSON数据首先要明确,解析的JSON字符串是属于JSONObject还是JSONArray。

android平台上一般有两种解析技术可供选择:android内置的org.json包和google的开源的gson库。

json已经内嵌在了android中,所以在平时的android开发中可以直接使用org.json来直接进行解析,而使用gson需要加入第三方的库文件。


三、对于常见JSON字符串的举例

对于一个JSON字符串,我们首先需要判断它是属于JSONObject还是JSONArray。如果最外层是由[]所包含的,那么它就是一个JSONArray,相当于是一个JSON数组;如果最外层是由{}所包含的,那么它就是一个JSONObject,就是一个JSON对象。

1、json = {"devid":"1234567800","latitude":"29.4963","longitude":"116.189","postime":"2014-06-10 12:13:00"};

这是最常见的映射关系的JSON字符串,而且也只是一个JSON对象,所以使用org.json和gson都很简单,但是一般来说直接使用org.json更为方便。

                JSONObject jsonObject = new JSONObject(json);
		String devid = jsonObject.getString("devid");
		String latitude = jsonObject.getString("latitude");
		String longitude = jsonObject.getString("longitude");
		String postime = jsonObject.getString("postime");
2、json =  [{"devid":"1234567800","latitude":"29.4963","longitude":"116.189","postime":"2014-06-10 12:13:00"},{"devid":"1234567832","latitude":"29.4943","longitude":"1161.129","postime":"2014-06-11 12:13:00"}];

可以看出这是一个JSONArray,所以只需要在刚才的代码基础上稍加改动就可以了:

                JSONArray jsonArray = new JSONArray(json);
		for (int i = 0; i < jsonArray.length(); i++) {
			JSONObject jsonObject = (JSONObject) jsonArray.opt(i);
			String devid = jsonObject.getString("devid");
			String latitude = jsonObject.getString("latitude");
			String longitude = jsonObject.getString("longitude");
			String postime = jsonObject.getString("postime");
		}

3、json = {"data":{"2580":"云南省","3219":"台湾省","35":"河北省","219":"山西省","3314":"澳门特别行政区","18":"天津市","1028":"安徽省","926":"浙江省","1692":"湖北省","1809":"湖南省","2726":"西藏自治区","3026":"青海省","1245":"江西省","2482":"贵州省","3078":"宁夏回族自治区","3106":"新疆维吾尔自治区","1150":"福建省","1946":"广东省","580":"吉林省","2925":"甘肃省","2807":"陕西省","2279":"四川省","3292":"香港特别行政区","650":"黑龙江省","2089":"广西壮族自治区","2240":"重庆市","810":"江苏省","351":"内蒙古自治区","792":"上海市","1":"北京市","465":"辽宁省","1357":"山东省","1515":"河南省","2213":"海南省"},"status":{"errorCode":"","errorDesc":"","succeed":"1"}};

通过分析可以看出来,最外层是一个JSONArray,里面有两个JSONObject,分别是data和status,status里面的就是上面第一个json那样的字符串,很容易解析,但是data中的json字符串就不像我们所见过的那样,所以这里对于data里面的数据解析就要使用一种新的方法了:

JSONObject data = connGet.getJSONObject("data");
Map<String,String> result = new HashMap<String, String>();
Iterator it = data.keys();
while (it.hasNext()) { 
	String key = it.next().toString(); 
	String value = data.getString(key);
	result.put(key, value);
}

通过迭代的方式,将data中的数据不断的读出来,并放入一个Map集合中,最后所得到的Map集合就是一个一个的JSON对了,只需要遍历Map就可以得到结果。


当然也可以使用Gson来进行解析,也是很容易的。

将data中的数据看作是一个Map,然后再遍历Map就行了


0
0
查看评论

一些时间类型的总结

1. 系统时间函数         在编程时,时间函数不可避免的会被使用。linux系统下相关时间的数据结构有time_t,timeval,timespec,tm,clock_t; windows下time_t,tm,SYSTEMTIME,FILE...
  • pud_zha
  • pud_zha
  • 2013-10-01 01:52
  • 825

对时间的一些操作总结

<br />由于项目要对时间进行一些数学运算,要使用 access 数据库交互一些时间的信息,于是乎便有了下文。。。<br /> <br />CTime Comparison Operators<br /><br />BOOL o...
  • xum2008
  • xum2008
  • 2010-09-08 17:15
  • 461

关于博弈论基础知识的一些总结

文章PDF文档:链接地址 博弈论是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取胜目标的理论。 基础的基础 a) 当前执行者想赢。这个是必要的,有时候题目中判别胜负的条件会与平时练习的恰好相反,此时你就应该按照题目要求思考,即在经典模型中思考当前执行...
  • xf_zhen
  • xf_zhen
  • 2016-07-23 18:51
  • 481

JavaScript关于创建对象和继承的一些总结

本文总结了JavaScript创建对象和实现继承的多种方式。 原文地址:https://www.zzfweb.cn/post/2017-12-26-create-obj.html 创建对象 普通方式 创建对象的普通方式有两种。 一种是: 使用new操作符生成Object对象的实...
  • wdx__123
  • wdx__123
  • 2017-12-27 10:59
  • 66

关于JSON的总结

一、前言最近学习并使用Vue的过程中,在使用Vue-resource的过程中遇到了以下问题:通过该插件异步请求数据的时候发现数据已经能正确请求到,但是无法通过response.json()解析返回体的body。通过查阅源码,发现该函数的主要作用就是将response对象中的body通过JSON.pa...
  • a1247529789
  • a1247529789
  • 2016-06-27 16:55
  • 1377

关于企业内部系统访问地址的一些思考

  • u013560667
  • u013560667
  • 2014-06-11 10:33
  • 518

json知识点整理

JSON的全称是javascript object notation (javascript对象表示法) 在json的名称-值对中,名称始终被双引号包裹 json的媒体类型是application/json json中的数据类型包括:对象、字符串、数字、布尔值、null...
  • strayyiyi
  • strayyiyi
  • 2017-02-04 14:17
  • 255

矩阵的一些操作

 /***********************typedef.h***************/#define TRUE              ...
  • yingcongxiao
  • yingcongxiao
  • 2005-01-14 11:18
  • 1328

MapReduce总结 (1)

【1】Hadoop Map/Reduce框架为每一个InputSplit产生一个map任务,而每个InputSplit是由该作业的InputFormat产生的。 【2】Mapper的输出被排序后,就被划分给每个Reducer。分块的总数目和一个作业的reduce任务的数目是一样的...
  • zzh118
  • zzh118
  • 2016-04-07 21:53
  • 347

关于一些初级ACM竞赛题目的分析和题解(一)。

关于一些初级ACM竞赛题目的分析和题解(一)   故事发生在在2017年年底,受我的室友cy1999巨巨的影响下,第一次接触到ACM竞赛,也是作为一名编程小白,第一次感受到编程语言的魅力。用竞赛这种形式来提高自己的编程能力,虽说不上是曲径通幽,但也不失为一种好方法。废话少说,上题。 ...
  • monster_ayb
  • monster_ayb
  • 2018-01-27 14:10
  • 90
    个人资料
    • 访问:21154次
    • 积分:687
    • 等级:
    • 排名:千里之外
    • 原创:43篇
    • 转载:0篇
    • 译文:0篇
    • 评论:6条
    文章分类
    最新评论