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);
- Android https-json解析
- 【json】android json解析
- Android-Android解析JSON
- Android Https相关完全解析
- Android数据解析:Json解析
- android---Json数据解析
- Android Json 数据解析
- android 解析JSON
- android 解析json数据格式
- android 解析json数据格式
- Android 解析json数据格式
- android 解析json数据格式
- android 解析json数据格式
- Android的JSON解析
- Android 解析Json
- android JSON 解析
- Android 解析json数据格式
- android解析Json
- 反向代理负载均衡
- Java多线程系列--“基础篇”05之 线程等待与唤醒
- Android四大基本组件介绍与生命周期
- Oracle 数据库导入导出 dmp文件
- Java 反射 ,Method的invoke()方法的使用
- Android https-json解析
- 欢迎使用CSDN-markdown编辑器
- DNS域名解析负载均衡
- 新华三2018校园招聘笔试面试题学习
- linux 忘记root(这里以centos 6.5为例)密码的解决办法
- linux 部署lnmp环境
- windows命令创建文件夹和拷贝
- javaScript实现滚动条事件
- iOS SDWebImage基本使用