前言喜欢在前言里谈自己的现状。可能有共鸣的同学更容易给自己留下纪念。过几个月或者几年他们回来看的时候,还是会有感情的。今天,我谈谈语言。以前做服务器的时候每天都联系json。我天真地以为json世界里只有php的json _ encode和json_decode。今天当我是客户的时候,花了将近一个小时解决JSON。在这里,我不是批评php的好坏。我只想说,多学习,多看不熟悉的领域,可以开阔眼界,知道外面的世界还有日子,知道一开始不喜欢的工作可能做不好。回来解释json。
什么是JSON JSON(JavaScript Object Natation)是一种轻量级的数据交换格式。与xml相比,JSON解析起来更简单,因此客户机和服务器之间的数据交换格式经常通过JSON进行交换
json有两种数据结构,一种是(键/值)对形式的无序jsonObject,一种对象以“{”(左花括号)开头,以“}”(右花括号)结尾。每个“名称”后面跟着一个“:”(冒号);在“名称/值”对之间使用“,”(逗号)
例如:{“name”: ' zhengyi . wzy ' },这是最简单的json Object。对于这种数据格式,键值必须是字符串,值可以是字符串、数字、对象、数组和其他数据类型。
另一种数据格式是有序的值集合,称为jsonArray,数组是有序的值集合。数组以“[”(左括号)开头,以“]”(右括号)结尾。值由“,”(逗号)分隔
安卓中与Json相关的解析类安卓的json解析部分在package org.json下,主要包括以下几类:
JSONObject这是系统中JSON定义的基本单元,它包含一对键/值
它对External(由toString()方法输出的值)调用的响应体现为标准字符串(例如:{“JSON”:“hello,world”},最外面的一个用花括号包装,其中键和值用冒号“:”隔开)。它对内部行为的操作格式稍有不同,例如:初始化一个JSONObject实例,并通过引用内部put()方法添加一个值:new JSON Object()。放(“JSON”,“你好,世界!”),在键和值之间用逗号“,”分隔
值类型包括:jsonobjects、jsonarrays、strings、booleans、整数、longs、doubles或null
有两种不同的值:
Get():在确认密钥存在的情况下使用;否则,当无法检索到相关键时,将引发异常消息opt():该方法相对灵活,当无法获得指定值时,将返回默认值,不会引发异常(个人建议使用该方法)
它代表一组有序的数值。将其转换为String输出(toString),用方括号包装,并用逗号分隔(例如:[“阿里巴巴”、“百度”、“腾讯”])
这个类的内部也有查询行为。get()和opt()方法都可以通过索引返回指定的值,put()方法用于添加或替换值
同样,JSONArray的值类型可以包括JSON对象、JSON数组、字符串、布尔值、整数、Longs、Doubles或NULL
安卓解析实例客户端一般从服务器获取字符串,并直接新建一个JSONObject。参考程序如下
这个网址提供了json字符串:http://api.androidhive.info/contacts/,我们可以启动一个线程来启动http请求并获取json字符串。参考代码如下:
私有字符串getJsonByNetwork(){//您可以通过此全球资源定位器(Uniform Resource Locator)获取json最终字符串URL=' http://API。安德罗伊希夫。信息/联系人/';DefaultHttpClient httpClient=new DefaultHttpClient();Http get Http get=new Http get(URL);输入流输入流=空字符串结果=null尝试{ HttpResponse响应=Httpclient。执行(HttpGet);inputStream=response.getEntity().getContent();//Json默认为UTF-8 buffere阅读器阅读器=新buffere阅读器(新的inputStream阅读器(inputStream,' UTF-8 '));StringBuilder sb=new StringBuilder();字符串tmp=null while((tmp=reader . readline())!=null){ sb。追加(tmp);}结果=某人。ToString();} catch(异常e) { try { if (inputStream!=null){ InputStream。close();} } catch (IOException se) { } }返回结果;} 解析json字符串解析json字符串的步骤一般如下所示:
(1) 创建JSONObject:
//创建一个JSON对象JSON对象JSON对象=新的JSON对象(结果);(2) 获取JSONArray,遍历JSONArray数组
//获取特定的JSON数组JSON数组JSON数组=JSON对象。getjson数组(“contacts”);//从数组中获取项(int I=0;我很抱歉。length();i ) { //TODO:遍历jsonarray } (3)获取JSONObject
//创建一个JSON对象JSON对象JSON对象=新的JSON对象(结果);//获取特定的JSON数组JSON数组JSON数组=JSON对象。getjson数组(“contacts”);//从数组中获取项(int I=0;我很抱歉。length();i ) { //获取特定的JSON对象JSON对象oneObject=JSON数组。getjson对象(I);} (4)获取特定字符串
//创建一个JSON对象JSON对象JSON对象=新的JSON对象(结果);//获取特定的JSON数组JSON数组JSON数组=JSON对象。getjson数组(“contacts”);//从数组中获取项(int I=0;我很抱歉。length();i ) { //获取特定的JSON对象JSON对象oneObject=JSON数组。getjson对象(I);//获取特定字符串字符串id=OneObject。getStrIng(' id ');字符串名称=OneObject。getString(' name ');Log.e('wzy ',' id为:' id ',名称为名称');} 解析结果:
03-05 10:26:08 . 690: E/wzy(26401): id为:c200,姓名为拉维塔玛达03-05 10:26:08 . 690: E/wzy(26401): id为:c201,姓名为约翰尼德普03名字是威尔史密斯03-05 10:26:08 .693:英/西(26401):身份证是:c209,名字是克林特伊斯特伍德03-05 10:263:08 .6943:英/西(26401):身份证是:c2010,名字是