zoukankan      html  css  js  c++  java
  • 一行代码解析复杂JSON文件:利用Android自带的包解析JSON

    上周写了一篇关于Android自带的org.JSON与JSONLIB相冲突的文章,今天我想写一下我对org.json使用的小心得

    由于学校项目要求解析一个复杂JSON,所以就上网搜了一下,不过Google一搜JSON数据解析,会出现五花八门的结果,JSONLIB, GSON, FASTJSON等等,唯独没有对org.json的使用,其实Android自带的JSON解析包相当好用,其用法与JSONLIB类似,我是先用的JSONLIB,在JRE环境下用得好好的,到了Android下怎么都跑不通(原来是包冲突T_T,也遇到这个深坑的同学可以翻我另外一篇关于这两个包冲突的文章)

    其实我建议,就用org.json包就好了,并且可以用很简单的几行代码完成复杂的JSON解析,最初我上网看了一些文章,为了解析一个复杂JSON文件又是递归又是干嘛的,实在太费劲了,也没必要。

    废话少说,贴上我的代码

     1 package com.helpers;
     2 
     3 import java.io.InputStream;
     4 
     5 import org.apache.http.util.EncodingUtils;
     6 import org.json.JSONArray;
     7 
     8 import android.content.Context;
     9 
    10 import com.example.test.R;
    11 
    12 public class Helpers {
    13     public String res;
    14     public JSONArray ja;
    15 
    16     public void init(Context context) {
    17         try {
    18             // 读取JSON文件
    19             InputStream in = context.getResources().openRawResource(
    20                     R.raw.community);
    21             int length = in.available();
    22             byte[] buffer = new byte[length];
    23             in.read(buffer);
    24             res = EncodingUtils.getString(buffer, "BIG5");
    25             in.close();
    26             // 实例化JSONArray, 因为我的JSON文件的最外层是Array,如果你是Object就应该实例化一个JSONObject
    27             ja = new JSONArray(res);
    28             for (int i = 0; i < ja.length(); ++i) {
    29                 //看看这一行很复杂,其实不难
    30                 //我的JSON文件中有20个JSONObject的主题,ja.getJSONObject(i)循环读取
    31                 //每个主题中有一个comments的Array存放了所有对于这个主题所有的评论getJSONArray("comments")
    32                 //ja.getJSONObject(i).getJSONArray("comments").getJSONObject(i),因为每个comments也是JSONObject这里第二个getJSONObject(i)就是获取这些comments中的第一个comments
    33                 //在comments这个Object下还有一个JSONObject叫author,它里面存放了comments得信息,所以通过getJSONObject("author")
    34                 //然后这已经是最后一层了,再往下已经没有子属的JSONObject或者JSONArray了,getString("profile_image"),大功告成
    35                 System.out.println(ja.getJSONObject(i).getJSONArray("comments").getJSONObject(i)
    36                         .getJSONObject("author").getString("profile_image"));
    37             }
    38         } catch (Exception e) {
    39             e.printStackTrace();
    40         }
    41 
    42     }
    43 }

    如果你看懂这个例子,那你应该明白了,JSONArray中可以嵌套JSONObject,也可以嵌套JSONArray,反之依然,JSONObject也可以嵌套ARRAY或者Object。无论多么复杂的JSON文件,解析的时候就是不断通过getJSONObject或者getJSONArray。JSON的解析说来说去就是层层获取(getJSONObject,getJSONArray),达到你想获取的数据所在的Object或者Array,然后getString,大功告成。

    搞清楚这个道理,再复杂的JSON数据文件,只要一行代码,分分钟解出来!

  • 相关阅读:
    laravel 5.5 仓库模式 文件之间接口与实现操作
    php 无线分类 根据子级找父级
    php 无限极分类,根据父级 找子级
    laravel5.4 中 dd和dump的区别。
    laravel hash密码生成和密码验证
    oracle建表详细信息
    关于组件的认识
    java的Thread Dump诊断工具
    weblogic连接池
    详解Oracle数据字典
  • 原文地址:https://www.cnblogs.com/Raymond-Yang/p/4137275.html
Copyright © 2011-2022 走看看