Android https-json解析

来源:互联网 发布:淘宝网打底连衣裙 编辑:程序博客网 时间:2024/06/07 03:37

Android https-json解析示例效果

截图

上截图看效果:
这里写图片描述

全部代码

package com.example.administrator.model.cesi;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import com.example.administrator.model.R;import com.example.administrator.model.net.https.HttpUtils;import com.example.administrator.model.net.https.HttpsClientHelper;/** * 通过接口,获取网络的信息,然后经过JSON解析,显示在屏幕上。 * 方法一: * * @author Administrator */public class TestNet extends Activity implements OnClickListener {    private EditText editText;    private Button button;    private TextView textView;    private final int SUCCESS = 1;    private final int FAILURE = 0;    private final int ERRORCODE = 2;    protected String weatherResult;    HttpsClientHelper https;    private Handler handler = new Handler() {        public void handleMessage(Message msg) {            switch (msg.what) {                case SUCCESS:                    /**                     * 获取信息成功后,对该信息进行JSON解析,得到所需要的信息,然后在textView上展示出来。                     */                    try {                        Toast.makeText(TestNet.this, "获取数据成功", Toast.LENGTH_SHORT).show();                        JSONAnalysis(msg.obj.toString());                    } catch (JSONException e) {                        e.printStackTrace();                    }                    break;                case FAILURE:                    Toast.makeText(TestNet.this, "获取数据失败", Toast.LENGTH_SHORT)                            .show();                    break;                case ERRORCODE:                    Toast.makeText(TestNet.this, "获取的CODE码不为200!",                            Toast.LENGTH_SHORT).show();                    break;                default:                    break;            }        }        ;    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.test_net);        /**         * 初始化          */        init();    }    private void init() {        https = new HttpsClientHelper();        editText = (EditText) findViewById(R.id.editText);        button = (Button) findViewById(R.id.button);        textView = (TextView) findViewById(R.id.show_text);        button.setOnClickListener(this);    }    /**     * JSON解析方法     */    protected void JSONAnalysis(String string) throws JSONException {        JSONObject object = null;        String[] str1 = new String[10000];        String[] str2 = new String[10000];        String[] str3 = new String[10000];        String[] str4 = new String[10000];        String[] str5 = new String[10000];        String[] str6 = new String[10000];        String[] str7 = new String[10000];        try {            JSONArray jsonArray = new JSONArray(string);            StringBuilder builder = new StringBuilder();            textView.setText("数据:" + builder.toString());            for (int i = 0; i < jsonArray.length(); i++) {                //新建一个JSON对象,该对象是某个数组里的其中一个对象                JSONObject jsonObject2 = (JSONObject) jsonArray.getJSONObject(i);                str1[i] = jsonObject2.getString("stcd");                str2[i] = jsonObject2.getString("stnm");                str3[i] = jsonObject2.getString("stlc");                str4[i] = jsonObject2.getString("stcd");                str5[i] = jsonObject2.getString("canalcode");                str6[i] = jsonObject2.getString("sttp");                str7[i] = jsonObject2.getString("lgtd");            }//            https.JSONAnalysis(string);            for (int j = 0; j < jsonArray.length(); j++) {                textView.setText("数据:\n" + "城市:" + str1[j] + "\n日期:" + str2[j] + "\n星期:" + str3[j]                        + "\n温度:" + str5[j] + "\n天气情况:" + str6[j] + "\n穿衣指数:" + str7[j]);            }        } catch (JSONException e) {            e.printStackTrace();        }    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.button:                /**                 * 点击按钮事件,在主线程中开启一个子线程进行网络请求                 * (因为在4.0只有不支持主线程进行网络请求,所以一般情况下,建议另开启子线程进行网络请求等耗时操作)。                 */                new Thread() {                    public void run() {                        int code;                        try {                            String path = editText.getText().toString();                            URL url = new URL(path);                            /**                             * 这里网络请求使用的是类HttpURLConnection,另外一种可以选择使用类HttpClient。                             */                            HttpURLConnection conn = (HttpURLConnection) url.openConnection();                            conn.setRequestMethod("GET");//使用GET方法获取                            conn.setConnectTimeout(5000);                            code = conn.getResponseCode();                            if (code == 200) {                                /**                                 * 如果获取的code为200,则证明数据获取是正确的。                                 */                                InputStream is = conn.getInputStream();                                String result = HttpUtils.readMyInputStream(is);                                /**                                 * 子线程发送消息到主线程,并将获取的结果带到主线程,让主线程来更新UI。                                 */                                Message msg = new Message();                                msg.obj = result;                                msg.what = SUCCESS;                                handler.sendMessage(msg);                            } else {                                Message msg = new Message();                                msg.what = ERRORCODE;                                handler.sendMessage(msg);                            }                        } catch (Exception e) {                            e.printStackTrace();                            /**                             * 如果获取失败,或出现异常,那么子线程发送失败的消息(FAILURE)到主线程,主线程显示Toast,来告诉使用者,数据获取是失败。                             */                            Message msg = new Message();                            msg.what = FAILURE;                            handler.sendMessage(msg);                        }                    }                    ;                }.start();                break;            default:                break;        }    }}  

核心代码

  /**     * JSON解析方法     */    protected void JSONAnalysis(String string) throws JSONException {        JSONObject object = null;        String[] str1 = new String[10000];        String[] str2 = new String[10000];        String[] str3 = new String[10000];        String[] str4 = new String[10000];        String[] str5 = new String[10000];        String[] str6 = new String[10000];        String[] str7 = new String[10000];        try {            JSONArray jsonArray = new JSONArray(string);            StringBuilder builder = new StringBuilder();            textView.setText("数据:" + builder.toString());            for (int i = 0; i < jsonArray.length(); i++) {                //新建一个JSON对象,该对象是某个数组里的其中一个对象                JSONObject jsonObject2 = (JSONObject) jsonArray.getJSONObject(i);                str1[i] = jsonObject2.getString("stcd");                str2[i] = jsonObject2.getString("stnm");                str3[i] = jsonObject2.getString("stlc");                str4[i] = jsonObject2.getString("stcd");                str5[i] = jsonObject2.getString("canalcode");                str6[i] = jsonObject2.getString("sttp");                str7[i] = jsonObject2.getString("lgtd");            }//            https.JSONAnalysis(string);            for (int j = 0; j < jsonArray.length(); j++) {                textView.setText("数据:\n" + "城市:" + str1[j] + "\n日期:" + str2[j] + "\n星期:" + str3[j]                        + "\n温度:" + str5[j] + "\n天气情况:" + str6[j] + "\n穿衣指数:" + str7[j]);            }        } catch (JSONException e) {            e.printStackTrace();        }    }

json解析简介与说明

简介

json官网:http://json.org。(json的jar包请移步json官网下载)
JSON:JavaScript 对象表示法(JavaScript Object Notation)。独立于语言和平台,比 XML 更小、更快,更易解析。如今JSON数据已经成为了互联网中大多数数据的传递方式,所以必须要熟练掌握。
Android平台自带了JSON解析的相关API,可以将文件、输入流中的数据转化为JSON对象,然后从对象中获取JSON保存的数据内容。

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中用到的异常

常用json接口格式

网址:http://www.bejson.com/knownjson/webInterface/

一般格式

JSON返回示例:一:{ /*JSONObject*/    "resultcode": "200",    "reason": "SUCCESSED!",    "result": [ /*JSONArray*/        { /*JSONObject*/            "city": "苏州",  /*城市*/            "PM2.5": "73",  /*PM2.5指数*/            "AQI": "98",    /*空气质量指数*/            "quality": "良", /*空气质量*/            "PM10": "50",/*PM10*/            "CO": "0.79",  /*一氧化碳*/            "NO2": "65",  /*二氧化氮*/            "O3": "28",    /*臭氧*/            "SO2": "41",  /*二氧化硫*/            "time": "2014-12-26 11:48:40"/*更新时间*/          }    ],    "error_code": 0}

二:

[    {    "stcd":"00001635",    "stnm":"黄金渠首流量站",    "stlc":"丰城市荷湖乡黄金水库出水口",    "canalcode":"A003",    "sttp":"ZZ",    "lgtd":115.74,"lttd":27.9,    "starttime":"","preq":11.0,    "plevel":2.0,"rlevel":2.0    },]

说明:对于第二种没有给出result字段的json

直接 JSONArray jsonArr = new JSONArray(string);然后 for(int i=0; i<jsonArr.length(); i++){    JSONObject jsonObj = jsonArr.getJSONObject(i);    jsonObj.getXXX........}

json用法

初始化:

     //初始化JSONObject 方法一          JSONObject jsonObject1 = new JSONObject();          jsonObject1.put("Name", "Tom");          jsonObject1.put("age", "11");          //初始化JSONObject 方法二          JSONObject jsonObject2 = new JSONObject("{'Name':'Tom','age':'11'}");          //初始化JSONArray 方法一          JSONArray jsonArray1 = new JSONArray();          jsonArray1.put("abc");          jsonArray1.put("xyz");          //初始化JSONArray 方法二          JSONArray jsonArray2 = new JSONArray("['abc','xyz']");  

JSONObject、JSONArray相互嵌套相互嵌套

   JSONObject jsonObject = new JSONObject("{'Name':'Tom','age':'11'}");          JSONArray jsonArray = new JSONArray("['abc','xyz']");          //JSONObject内嵌JSONObject          JSONObject jsonObject1 = new JSONObject();          jsonObject1.put("object1", jsonObject);          jsonObject1.put("object2", jsonObject);          //JSONObject内嵌JSONArray          JSONObject jsonObject2 = new JSONObject();          jsonObject2.put("JSONArray1", jsonArray);          jsonObject2.put("JSONArray2", jsonArray);          //JSONArray内嵌JSONArray          JSONArray jsonArray1 = new JSONArray();          jsonArray1.put(jsonArray);          jsonArray1.put(jsonArray);          //JSONArray内嵌JSONObject          JSONArray jsonArray2 = new JSONArray();          jsonArray2.put(jsonObject);          jsonArray2.put(jsonObject);  

json解析

        //解析字符串          JSONObject jsonObject1 = new JSONObject();          jsonObject1.put("Name", "Tom");          jsonObject1.put("age", "11");          System.out.println("解析字符串:" + "\r" + jsonObject1.getString("Name"));          //解析对象          JSONObject jsonObject = new JSONObject("{'Name':'Tom','age':'11'}");          JSONObject jsonObject2 = new JSONObject();          jsonObject2.put("jsonObject", jsonObject);  
原创粉丝点击