Android解析json总结_第1页
Android解析json总结_第2页
Android解析json总结_第3页
Android解析json总结_第4页
Android解析json总结_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JSONJSON 的定义 的定义 一种轻量级的数据交换格式 具有良好的可读和便于快速编写的特性 业内主 流技术为其提供了完整的解决方案 有点类似于正则表达式 获得了当今大部 分语言的支持 从而可以在不同平台间进行数据交换 JSON 采用兼容性很高 的文本格式 同时也具备类似于 C 语言体系的行为 Json org JSON Vs XML 1 JSON 和 XML 的数据可读性基本相同 2 JSON 和 XML 同样拥有丰富的解析手段 3 JSON 相对于 XML 来讲 数据的体积小 4 JSON 与 JavaScript 的交互更加方便 5 JSON 对数据的描述性比 XML 较差 6 JSON 的速度要远远快于 XML android2 3android2 3提供的提供的 jsonjson 解析类解析类 android 的 json 解析部分都在包 org json 下 主要有以下几个类 JSONObject 可以看作是一个 json 对象 这是系统中有关 JSON 定义的基本单 元 其包含一对儿 Key Value 数值 它对外部 External 应用 toString 方法输 出的数值 调用的响应体现为一个标准的字符串 例如 JSON Hello World 最外被大括号包裹 其中的 Key 和 Value 被冒号 分隔 其对于内部 Internal 行为的操作格式略微 例如 初始化一个 JSONObject 实例 引用内部的 put 方 法添加数值 new JSONObject put JSON Hello World 在 Key 和 Value 之 间是以逗号 分隔 Value 的类型包括 Boolean JSONArray JSONObject Number String 或者默认值 JSONObject NULL object JSONStringer json 文本构建类 根据官方的解释 这个类可以帮助快速和 便捷的创建 JSON text 其最大的优点在于可以减少由于 格式的错误导致程序 异常 引用这个类可以自动严格按照 JSON 语法规则 syntax rules 创建 JSON text 每个 JSONStringer 实体只能对应创建一个 JSON text 其最大的 优点在于可以减少由于格式的错误导致程序异常 引用这个类可以自动严格按 照 JSON 语法规则 syntax rules 创建 JSON text 每个 JSONStringer 实体 只能对应创建一个 JSON text JSONArray 它代表一组有序的数值 将其转换为 String 输出 toString 所表现 的形式是用方括号包裹 数值以逗号 分隔 例如 value1 value2 value3 大家可以亲自利用简短的代码更加直观的了解其格式 这个类的内部同样具有 查询行为 get 和 opt 两种方法都可以通过 index 索引返回指定的数值 put 方 法用来添加或者替换数值 同样这个类的 value 类型可以包括 Boolean JSONArray JSONObject Number String 或者默认值 JSONObject NULL object JSONTokener json 解析类 JSONException json 中用到的异常 JSONObject JSONObject JSONArrayJSONArray 来构建来构建 jsonjson 文本文本 代码代码 假设现在要创建这样一个 json 文本 phone 12345678 87654321 数组 name yuanzhifei89 字符串 age 100 数值 address country china province jiangsu 对象 married false 布尔值 try 首先最外层是 是创建一个对象 JSONObject person new JSONObject 第一个键 phone 的值是数组 所以需要创建数组对象 JSONArray phone new JSONArray phone put 12345678 put 87654321 person put phone phone person put name yuanzhifei89 person put age 100 键 address 的值是对象 所以又要创建一个对象 JSONObject address new JSONObject address put country china address put province jiangsu person put address address person put married false catch JSONException ex 键为 null 或使用 json 不支持的数字格式 NaN infinities throw new RuntimeException ex getTypegetType 和和 optTypeoptType apiapi 的使用的使用 getType 可以将要获取的键的值转换为指定的类型 如果无法转换或没有值则抛出 JSONException optType 也是将要获取的键的值转换为指定的类型 无法转换或没 有值时返回用户提供或这默认提供的值 代码代码 try 所有使用的对象都是用上面创建的对象 将第一个电话号码转换为数值和将名字转换为数值 phone getLong 0 person getLong name 会抛异常 因为名字无法转换为 long phone optLong 0 代码内置的默认值 phone optLong 0 1000 用户提供的默认值 person optLong name person optLong name 1000 不像上面那样抛异常 而是返回1000 catch JSONException ex 异常处理代码 除了上面的两个类 还可以使用除了上面的两个类 还可以使用 JSONStringerJSONStringer 来构建来构建 jsonjson 文本文本 Java 代码代码 try JSONStringer jsonText new JSONStringer 首先是 对象开始 object 和 endObject 必须配对使用 jsonText object jsonText key phone 键 phone 的值是数组 array 和 endArray 必须配对使用 jsonText array jsonText value 12345678 value 87654321 jsonText endArray jsonText key name jsonText value yuanzhifei89 jsonText key age jsonText value 100 jsonText key address 键 address 的值是对象 jsonText object jsonText key country jsonText value china jsonText key province jsonText value jiangsu jsonText endObject jsonText key married jsonText value false 对象结束 jsonText endObject catch JSONException ex throw new RuntimeException ex jsonjson 文本解析类文本解析类 JSONTokenerJSONTokener 按照 RFC4627 规范将 json 文本解析为相应的对象 对于将对于将 jsonjson 文本解析为对象 只需要用到该类的两个文本解析为对象 只需要用到该类的两个 apiapi 构造函数 public Object nextValue 代码代码 phone 12345678 87654321 数组 name yuanzhifei89 字符串 age 100 数值 address country china province jiangsu 对象 married false 布尔值 private static final String JSON phone 12345678 87654321 name yuanzhifei89 age 100 address country china province jiangsu married false try JSONTokener jsonParser new JSONTokener JSON 此时还未读取任何 json 文本 直接读取就是一个 JSONObject 对象 如果此时的读取位置在 name 了 那么 nextValue 就是 yuanzhifei89 String JSONObject person JSONObject jsonParser nextValue 接下来的就是 JSON 对象的操作了 person getJSONArray phone person getString name person getInt age person getJSONObject address person getBoolean married catch JSONException ex 异常处理代码 其它的其它的 apiapi 基本就是用来查看基本就是用来查看 jsonjson 文本中的文本的文本中的文本的 代码代码 try JSONTokener jsonParser new JSONTokener JSON 继续向下读8个 json 文本中的字符 此时刚开始 即在 处 jsonParser next 8 phone tab 算一个字符 继续向下读1个 json 文本中的字符 jsonParser next 继续向下读取一个 json 文本中的字符 该字符不是空白 同时也不是注视中的 字符 jsonParser nextClean 返回当前的读取位置到第一次遇到 a 之间的字符串 不包括 a jsonParser nextString a 12345678 87654321 n 前面有两个空格 返回当前读取位置到第一次遇到字符串中 如 0089 任意字符之间的字符串 同时该字符是 trimmed 的 此处就是第一次遇到了89 jsonParser nextTo 0089 me yuanzhifei 读取位置撤销一个 jsonParser back jsonParser next i 读取位置前进到指定字符串处 包括字符串 jsonParser skipPast address jsonParser next 8 c 读取位置前进到执行字符处 不包括字符 jsonParser skipTo m jsonParser next 8 married catch JSONException ex 异常处理代码 以下是一个标准的 JSON 请求实现过程 查看源码 打印 01 HttpPost request newHttpPost url 02 先封装一个 JSON 对象 03 JSONObject param newJSONObject 04 param put name rarnu 05 param put password 123456 06 绑定到请求 Entry 07 StringEntity se newStringEntity param toString 08 request setEntity se 09 发送请求 10 HttpResponse httpResponse newDefaultHttpClient execute request 11 得到应答的字符串 这也是一个 JSON 格式保存的数据 12 String retSrc EntityUtils toString httpResponse getEntity 13 生成 JSON 对象 14 JSONObject result newJSONObject retSrc 15 String token result get token 下面这个是自己修改别人的小例子 主要是加一些注释和讲解 这个例子主要 是使用 android 进行 json 解析 查看源码 打印 1 单数据 singer id 01 name tom gender 男 2 多个数据 singers 3 id 02 name tom gender 男 4 id 03 name jerry gender 男 5 id 04 name jim gender 男 6 id 05 name lily gender 女 下面的类主要是解析单个数据 parseJson 和多个数据的方法 parseJsonMulti 查看源码 打印 01 publicclassJsonActivityextendsActivity 02 Called when the activity is first created 03 privateTextView tvJson 04 privateButton btnJson 05 privateButton btnJsonMulti 06 Override 07 publicvoidonCreate Bundle savedInstanceState 08 super onCreate savedInstanceState 09 setContentView R layout main 10 tvJson TextView this findViewById R id tvJson 11 btnJson Button this findViewById R id btnJson 12 btnJsonMulti Button this findViewById R id btnJsonMulti 13 btnJson setOnClickListener newView OnClickListener 14 Override 15 publicvoidonClick View v 16 url 17 String strUrl http 10 158 166 110 8080 AndroidServer JsonServlet 18 String strUrl ServerPageUtil getStrUrl UrlsOfServer JSON SINGER 19 获得返回的 Json 字符 串 20 String strResult connServerForResult strUrl 21 解析 Json 字符 串 22 parseJson strResult 23 24 25 btnJsonMulti setOnClickListener newView OnClickListener 26 Override 27 publicvoidonClick View v 28 String strUrl ServerPageUtil getStrUrl UrlsOfServer JSON SINGERS 29 String strResult connServerForResult strUrl 30 获得多个 Singer 31 parseJsonMulti strResult 32 33 34 35 privateString connServerForResult String strUrl 36 HttpGet 对 象 37 HttpGet httpRequest newHttpGet strUrl 38 String strResult 39 try 40 HttpClient 对 象 41 HttpClient httpClient newDefaultHttpClient 42 获得 HttpResponse 对 象 43 HttpResponse httpResponse httpClient execute httpRequest 44 if httpResponse getStatusLine getStatusCode HttpStatus SC OK 45 取得返回的数据 46 strResult EntityUtils toString httpResponse getEntity 47 48 catch ClientProtocolException e 49 tvJson setText protocol error 50 e printStackTrace 51 catch IOException e 52 tvJson setText IO error 53 e printStackTrace 54 55 returnstrResult 56 57 普通 Json 数据解 析 58 privatevoidparseJson String strResult 59 try 60 JSONObject jsonObj new

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论