关闭

Android之解析JSON格式数据

标签: Androidjson解析
384人阅读 评论(0) 收藏 举报
分类:

1.JSON格式分类

1.获取"数组形式"的JSON数据
数据形式:[{"stuNo":100,"name":"小明"},{"stuNo":101,"name":"小张"}]数据为数组形式,直接用 android框架


2.获取"对象形式"的JSON数据
 返回的数据形式是一个Object类型,所以可以直接转换成一个Object
数据形式:{"total":2,"success":true,"appList":[{"id":1,"name":"小猪"},{"id":2,"name":"小猫"}]}


3.获取类型复杂的JSON数据
数据形式: 
{"name":"小猪", "age":23, "content":{"questionsTotal":2, "questions": [ { "question": "what's your name?",
              "answer": "小猪"}, {"question": "what's your age", "answer": "23"}] } }


2.工具类代码

package demo.xzy.qh.com.jsondemo;

import android.util.Log;

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 从internet获取json数据,并转换为list
 * json处理工具类
 */
public class DealJsonUtil {

    private static final String TAG = "DealJsonUtil";
    /**
     * 获取"数组形式"的JSON数据
     * 数据形式:[{"stuNo":100,"name":"小明"},{"stuNo":101,"name":"小张"}]数据为数组形式
     *
     * @param path 网页json路径
     */
    public static List<Map<String, String>> getJSONArray(String path) throws Exception {
        String json = null;
        List<Map<String, String>> list = new ArrayList<>();
        Map<String, String> map = null;
        URL url = new URL(path);
        /**HttpURLConnection对象,从网络中获取网页数据*/
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        /**设置超时时间为5秒*/
        conn.setConnectTimeout(5 * 1000);
        /**HttpURLConnection是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET*/
        conn.setRequestMethod("GET");
        /**判断请求是否成功,成功时请求码为200,否则失败*/
        if (conn.getResponseCode() == 200) {
            /**获取数据输入流*/
            InputStream is = conn.getInputStream();
            /**把输入流转换成字符数组*/
            byte[] data = readStream2Array(is);
            /**字符数组转换成字符串*/
            json = new String(data);
            /**数据形式:[{"stuNo":100,"name":"小明"},{"stuNo":101,"name":"小张"}]数据为数组形式,直接用 android框架  */
            JSONArray jsonArray = new JSONArray(json);
            for (int i = 0; i < jsonArray.length(); i++) {
                /**获取每条数据中的对象*/
                JSONObject item = jsonArray.getJSONObject(i);
                /**注意key值要一致*/
                String stuNo = item.getString("stuNo");
                String name = item.getString("name");

                map = new HashMap<>();
                map.put("stuNo", stuNo);
                map.put("name", name);

                list.add(map);
            }
        }
        return list;
    }


    /**
     * 获取"对象形式"的JSON数据,
     * 数据形式:{"total":2,"success":true,"appList":[{"id":1,"name":"小猪"},{"id":2,"name":"小猫"}]}
     * 返回的数据形式是一个Object类型,所以可以直接转换成一个Object
     *
     * @param path 网页json路径
     * @return 返回List
     * @throws Exception
     */
    public static List<Map<String, Object>> getJSONObject(String path) throws Exception {
        List<Map<String, Object>> list = new ArrayList<>();
        try {
            Map<String, Object> map = null;
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5 * 1000); // 单位是毫秒,设置超时时间为5秒
            conn.setRequestMethod("GET");
            if (conn.getResponseCode() == 200) {
                InputStream is = conn.getInputStream();
                byte[] data = readStream2Array(is);
                String json = new String(data);
                /** 数据形式:{"total":2,"success":true,"appList":[{"id":1,"name":"小猪"},{"id":2,"name":"小猫"}]}
                 * 返回的数据形式是一个Object类型,所以可以直接转换成一个Object*/
                JSONObject jsonObject = new JSONObject(json);
                boolean success = jsonObject.getBoolean("success");
                if (success) {
                    /**json对象中有一个数组数据,又可以使用getJSONArray获取数组*/
                    JSONArray jsonArray = jsonObject.getJSONArray("appList");
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject item = jsonArray.getJSONObject(i);
                        int id = item.optInt("id");
                        String name = item.getString("name");

                        map = new HashMap<>();

                        map.put("id", id);
                        map.put("name", name);
                        list.add(map);
                    }
                } else {
                    Log.i(TAG, "getJSONObject: success:" + success);
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }


    /**
     * 获取类型复杂的JSON数据
     * 数据形式: {"name":"小猪", "age":23, "content":{"questionsTotal":2, "questions": [ { "question": "what's your name?",
     * "answer": "小猪"}, {"question": "what's your age", "answer": "23"}] } }
     *
     * @param path 网页json路径
     */
    public static List<Map<String, Object>> getComplexJSON(String path) throws Exception {
        List<Map<String, Object>> list = new ArrayList<>();
        Map<String, Object> map = null;
        URL url = new URL(path);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(5 * 1000);
        conn.setRequestMethod("GET");
        if (conn.getResponseCode() == 200) {
            InputStream is = conn.getInputStream();
            byte[] data = readStream2Array(is);
            String json = new String(data);
            /**
             * 数据形式: {"name":"小猪", "age":23, "content":{"questionsTotal":2, "questions": [ { "question": "what's your name?",
             * "answer": "小猪"}, {"question": "what's your age", "answer": "23"}] } }
             */
            JSONObject jsonObject = new JSONObject(json);

            String name = jsonObject.getString("name");
            int age = jsonObject.getInt("age");

            Log.i("abc", "name:" + name + " | age:" + age);

            JSONObject contentObject = jsonObject.getJSONObject("content");
            String questionsTotal = contentObject.getString("questionsTotal");

            Log.i(TAG, "getComplexJSON: questionsTotal:" + questionsTotal);

            JSONArray contentArray = contentObject.getJSONArray("questions");
            for (int i = 0; i < contentArray.length(); i++) {
                JSONObject item = contentArray.getJSONObject(i);
                String question = item.getString("question");
                String answer = item.getString("answer");

                map = new HashMap<>();
                map.put("question", question);
                map.put("answer", answer);

                list.add(map);
            }
        }
        return list;
    }


    /**
     * 把输入流转换成字符数组
     */
    public static byte[] readStream2Array(InputStream inputStream) throws Exception {
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = inputStream.read(buffer)) != -1) {
            bout.write(buffer, 0, len);
        }
        bout.close();
        inputStream.close();
        return bout.toByteArray();
    }
}



1
0
查看评论

android学习二十三(解析json格式数据)

前面我们已经掌握了xml格式数据的解析方式,那么接下来我们学习下如何解析json格式的数据。比起xml,json的主要优势在于它体积更小,在网络上传输的时候可以更省流量。但缺点在于,它的语义性差,看起来不如xml直观。     开始之前,先在自己的电脑apache-to...
  • wj903829182
  • wj903829182
  • 2015-01-08 10:41
  • 1237

Android 解析JSON格式数据

之前在学习”如何解析:数据”的时候,在网上查了很多资料,在这里我总结一下几个常用的框架,一个是json-lib,另外一个是Gson。为了学习的方便,我的代码在java环境下运行,不在android环境下运行(1)json-lib框架 先到网上去下载json-lib.jar,然后导入...
  • Wu_Ming0821
  • Wu_Ming0821
  • 2016-06-26 17:17
  • 278

解析JSON格式数据常见方法

待解析的JSON格式的文件如下:     [{"id":"5", "version":"1.0", "name":"xiaowang"},     {"id&...
  • Xurns
  • Xurns
  • 2016-06-06 09:10
  • 6003

对JavaScript解析JSON格式数据的理解

对JavaScript解析JSON格式数据的理解 一、JSON与JavaScript对象的关系      1,JSON的由来:               在21世纪初,Douglas Croc...
  • qq_24754061
  • qq_24754061
  • 2017-03-24 19:13
  • 350

Java解析JSON格式的数据

一json-lib.jar开发包使用依赖包 json-lib.jar开发包使用需要依赖包以下开发包: Json-lib requires (at least) the following dependencies in your classpath:   ...
  • jbjwpzyl3611421
  • jbjwpzyl3611421
  • 2013-10-13 08:42
  • 4412

【js与jquery】jquery对返回json格式数据的处理和解析

1.php代码: <?php header("Content-Type:text/html; charset=utf-8"); //一般情况下,使用json_encode()函数生成json格式的字符串 echo "{ username : \&q...
  • yanhui_wei
  • yanhui_wei
  • 2012-09-03 01:36
  • 2724

json格式数据解析

前后端分离,前端获取根据远程数据调用需要对传过来的数据做解析,对于json数据还是刚刚接触,下面叙述下自己在项目中是怎么解决的。
  • wgp15732622312
  • wgp15732622312
  • 2017-05-28 21:50
  • 366

Android之JSON格式数据解析

JSON:JavaScript 对象表示法(JavaScript Object Notation)。独立于语言和平台,比 XML 更小、更快,更易解析。如今JSON数据已经成为了互联网中大多数数据的传递方式,所以必须要熟练掌握。 Android平台自带了JSON解析的相关API,可以将文件、输入流中...
  • HanTangSongMing
  • HanTangSongMing
  • 2015-01-01 12:45
  • 60939

java解析json格式数据

有时候可能会用到json格式进行数据的传输,那么怎么把接收到的数据解析出来呢? 下面介绍两种解析json数据的方法:        1、通过谷歌的Gson来进行解析:  json数据:sTotalString = {&qu...
  • djun100
  • djun100
  • 2013-09-28 16:50
  • 8246

json数据格式解析

json数据格式解析我自己分为两种; 一种是普通的,一种是带有数组形式的;   普通形式的: 服务器端返回的json数据格式如下: {"userbean":{"Uid":"100196","...
  • java2009cgh
  • java2009cgh
  • 2012-12-10 10:12
  • 19587
    个人资料
    • 访问:630627次
    • 积分:9608
    • 等级:
    • 排名:第2206名
    • 原创:318篇
    • 转载:125篇
    • 译文:0篇
    • 评论:75条
    个人联系方式
    加入我的QQ群
    文章分类
    最新评论