关于JSON的一些总结

原创 2015年11月18日 13:23:44

一、关于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就行了


版权声明:本文为博主原创文章,未经博主允许不得转载。

尚硅谷_json处理总结

  • 2015年12月17日 09:20
  • 347KB
  • 下载

解析JSON总结示例源码

  • 2016年06月28日 22:39
  • 19.08MB
  • 下载

Android网络数据JSON解析使用总结

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。...

Android解ndroid解析json总结

  • 2015年12月09日 10:23
  • 153KB
  • 下载

json知识总结

  • 2014年11月20日 00:10
  • 46KB
  • 下载

Json系列之六 揭开JsonConfig的神秘面纱 总结篇

JsonConfig 里面的方法分类两种,是java to json 或者是 json to java的。但是api方法上有的时候很难看出所以大家最好有源码,这个我觉得后去的版本应该修改才是。 ...

JSON API总结

  • 2009年04月09日 11:26
  • 789B
  • 下载

Ajax 解析XML+json总结

  • 2010年08月23日 03:18
  • 559KB
  • 下载

C#解析JSON字符串总结

1、通用方式【★★★★★】:这种方式是使用开源的类库Newtonsoft.Json (下载地址http://json.codeplex.com/)。下载后添加dll引用就能用。 首先添加引用:usi...

Json库的使用总结

  • 2008年11月26日 21:02
  • 132KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于JSON的一些总结
举报原因:
原因补充:

(最多只允许输入30个字)