安卓解析 json 4种格式 全解析
1 简单的一个 { ,,,,}
2 里面有数组 { , [{,,},{,,}],}
3 直接一个数组
4 数组里有数组
5 其他情况? 没有吧,除非json格式不规范
主代码:
package com.example.json;
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.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private Button btn2;
private Button btn3;
private Button btn4;
private Button btn5;
private Button btn6;
private Button btn7;
private TextView txt1;
private String baseUrl="http://ip:8088/ship/servlet/getposinfo";
private String str="";
private Handler handler=new Handler()
{
@Override
public void handleMessage(Message msg) {
// 返回的字符串 直接是个数组
// [{"devid":"1234567800","latitude":"29.4963","longitude":"116.189","postime":"2014-06-10 12:13:00"},
// {"devid":"1234567832","latitude":"29.4943","longitude":"1161.129","postime":"2014-06-11 12:13:00"}]
if (msg.what==1)
{
Log.v("zms","使用httpclient,返回的json");
try {
JSONArray jsonArray = new JSONArray(String.valueOf(msg.obj));
txt1.setText(" ");
str="httpclient:";
for (int i=0;i<jsonArray.length();i++)
{
JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);
str=str+"第"+i+"个,devid:"+jsonObject2.getString("devid")+"维度:"+jsonObject2.getString("latitude")+"\n";
txt1.setText(str);
Log.v("zms", str);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else if (msg.what==2)
{
Log.v("zms","使用httpurlconnection返回的json");
try {
JSONArray jsonArray = new JSONArray(String.valueOf(msg.obj));
txt1.setText(" ");
str="urlconnect:";
for (int i=0;i<jsonArray.length();i++)
{
JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);
str=str+"第"+i+"个,devid:"+jsonObject2.getString("devid")+"维度:"+jsonObject2.getString("latitude")+"\n";
txt1.setText(str);
Log.v("zms", str);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt1=(TextView)findViewById(R.id.textView1);
//最简单 的 直接一个对象
btn2=(Button)findViewById(R.id.button2);
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
txt1.setText("");
str="";
try {
// {"username":"zms",age:23,"addr","from china"};
String json="{\"username\":\"zms\",\"age\":43,\"addr\":\"江西省高安市村前镇\"}";
JSONObject jsonObject2 =new JSONObject(json);
str="名字:"+jsonObject2.getString("username")+"年薪:"+jsonObject2.getString("age")+jsonObject2.getString("addr")+"\n";
txt1.setText(str);
Log.v("zms", str);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//对象里有数组
btn3=(Button)findViewById(R.id.button3);
btn3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
txt1.setText("");
str="";
try {
//{"username":"zms",age:11,"jicheng":[{"zhengshu":"PMP","date":"2011年"},{"zhengshu":"信息系统项目管理师","date","2012年"}],"addr":"江西"}
// 这种也属于 对象里有数组 {"json":[{"username":"zms","date":"2011年"},{"username":"ivy","date","2012年"}]}
String json= "{\"username\":\"张木生\",age:11,\"jicheng\":[{\"zhengshu\":\"PMP\",\"date\":\"2011年\"},{\"zhengshu\":\"信息系统项目管理师\",\"date\":\"2012年\"}],\"addr\":\"江西\"}";
JSONObject jsonObject2 =new JSONObject(json);
str="名字:"+jsonObject2.getString("username");
str=str+"工龄:"+jsonObject2.getString("age")+"证书:";
JSONArray jsonArray = jsonObject2.getJSONArray("jicheng");
for (int i=0;i<jsonArray.length();i++)
{
JSONObject jsonObjectSon= (JSONObject)jsonArray.opt(i);
str=str+jsonObjectSon.getString("zhengshu")+"年份:"+jsonObjectSon.getString("date");
}
str=str+"籍贯"+jsonObject2.getString("addr");
txt1.setText(str);
Log.v("zms", str);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//直接一个数组
btn4=(Button)findViewById(R.id.button4);
btn4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.v("zms","响应4");
txt1.setText("");
str="";
// 返回的字符串 直接是个数组
// [{"devid":"1234567800","latitude":"29.4963","longitude":"116.189"},{"devid":"1234567832","latitude":"29.4943","longitude":"1161.129"}]
String json="[{\"devid\":\"1234567800\",\"latitude\":\"29.4963\",\"longitude\":\"116.189\"},{\"devid\":\"1234567832\",\"latitude\":\"29.4943\",\"longitude\":\"1161.129\"}]";
try {
JSONArray jsonArray = new JSONArray(json);
for (int i=0;i<jsonArray.length();i++)
{
JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);
str=str+"第"+i+"个,devid:"+jsonObject2.getString("devid")+"维度:"+jsonObject2.getString("latitude")+"经度:"+jsonObject2.getString("longitude")+"\n";
}
txt1.setText(str);
Log.v("zms", str);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//数组里有数组
btn5=(Button)findViewById(R.id.button5);
btn5.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
txt1.setText("");
str="";
// 返回的字符串 直接是个数组
/* [
{"devid":"1234567800","gps":[{"time":"2014-11-12","latitude":"29.4963","longitude":"116.189"},{"time":"2014-11-12","latitude":"29.4963","longitude":"116.189" }],"devname":"赣01"},
{"devid":"1234567800","gps":[{"time":"2014-11-12","latitude":"29.4963","longitude":"116.189"},{"time":"2014-11-12","latitude":"29.4963","longitude":"116.189" }],"devname":"赣92"},
{"devid":"1234567800","gps":[{"time":"2014-11-12","latitude":"29.4963","longitude":"116.189"},{"time":"2014-11-12","latitude":"29.4963","longitude":"116.189" }],"devname":"赣43"},
], */
String json="["+
"{\"devid\":\"1234567800\",\"gps\":[{\"time\":\"2014-11-12\",\"latitude\":\"29.4963\",\"longitude\":\"116.189\"},{\"time\":\"2014-11-12\",\"latitude\":\"29.4963\",\"longitude\":\"116.189\" }],\"devname\":\"赣01\"},"+
" {\"devid\":\"1234567800\",\"gps\":[{\"time\":\"2014-11-12\",\"latitude\":\"29.4963\",\"longitude\":\"116.189\"},{\"time\":\"2014-11-12\",\"latitude\":\"29.4963\",\"longitude\":\"116.189\" }],\"devname\":\"赣92\"},"+
" {\"devid\":\"1234567800\",\"gps\":[{\"time\":\"2014-11-12\",\"latitude\":\"29.4963\",\"longitude\":\"116.189\"},{\"time\":\"2014-11-12\",\"latitude\":\"29.4963\",\"longitude\":\"116.189\" }],\"devname\":\"赣43\"}"+
"]";
try {
JSONArray jsonArray = new JSONArray(json);
for (int i=0;i<jsonArray.length();i++)
{
String tpstr="";
JSONObject jsonObject5 = (JSONObject)jsonArray.opt(i);
str=str+"第"+i+"条船,设备号devid:"+jsonObject5.getString("devid");
JSONArray jsonArray5 = jsonObject5.getJSONArray("gps");
for (int j=0;j<jsonArray5.length();j++)
{
JSONObject jsonOb5Son=(JSONObject)jsonArray5.opt(j);
tpstr="采集时间:"+jsonOb5Son.getString("time")+"维度"+jsonOb5Son.getString("latitude")+"经度:"+jsonOb5Son.getString("longitude");
}
str=str+tpstr;
}
txt1.setText(str);
Log.v("zms", str);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//httpclient访问网络返回json
btn6=(Button)findViewById(R.id.button6);
btn6.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
txt1.setText("");
/*从安卓3.0以后,就不允许在主线程中直接访问网络,必须在子线程中访问
访问后要修改主线程的UI,需要使用handler通信*/
accessThread1 mythread1=new accessThread1();
mythread1.start();
}
});
//httpurlconnection访问网络返回json
btn7=(Button)findViewById(R.id.button7);
btn7.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
txt1.setText("");
/*从安卓3.0以后,就不允许在主线程中直接访问网络,必须在子线程中访问
访问后要修改主线程的UI,需要使用handler通信*/
accessThread2 mythread2=new accessThread2();
mythread2.start();
}
});
}
class accessThread1 extends Thread{
@Override
public void run() {
Log.v("zms","线程accessThread开始");
Message msg1=handler.obtainMessage();
msg1.what=1;
msg1.obj=util.getHttpJsonByhttpclient(baseUrl);
handler.sendMessage(msg1);
super.run();
}
}
class accessThread2 extends Thread{
@Override
public void run() {
Log.v("zms","线程accessThread2开始");
Message msg2=handler.obtainMessage();
msg2.what=2;
msg2.obj=util.getHttpJsonByurlconnection(baseUrl);
handler.sendMessage(msg2);
super.run();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
-------------------------------------------------------------------------------------------------------------------------------
layout XMl文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="直接一个对象" />
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="对象里有数组" />
<Button
android:id="@+id/button4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="直接一个数组" />
<Button
android:id="@+id/button5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="数组里还有数组" />
<Button
android:id="@+id/button6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="httpclient获取json" />
<Button
android:id="@+id/button7"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="httpurlconnection获取json" />
</LinearLayout>
公共服务类 util 里面2个静态方法 用来 返回 json 字符串
package com.example.json;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.Net.HttpURLConnection;
import java.net.URL;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.util.Log;
public class util {
public static String getHttpJsonByhttpclient(String fromurl)
{
try{
Log.v("zms","使用httget");
HttpGet geturl=new HttpGet(fromurl);
DefaultHttpClient httpclient=new DefaultHttpClient();
HttpResponse response=httpclient.execute(geturl);
Log.v("zms","响应码"+response.getStatusLine().getStatusCode());
if (response.getStatusLine().getStatusCode()==200)
{
String returnStr=EntityUtils.toString(response.getEntity(),"utf-8");
Log.v("zms","返回值"+returnStr);
return returnStr;
} else
{
Log.v("zms","访问网络返回数据失败,错误码:"+response.getStatusLine().getStatusCode());
}
}
catch(IOException e)
{
e.printStackTrace();
}
return null;
}
public static String getHttpJsonByurlconnection(String fromurl)
{
try
{
Log.v("zms","使用httpurlconnection");
ByteArrayOutputStream os=new ByteArrayOutputStream();
byte[] data =new byte[1024];
int len=0;
URL url=new URL(fromurl);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
InputStream in=conn.getInputStream();
while ((len=in.read(data))!=-1)
{
os.write(data,0,len);
}
in.close();
return new String(os.toByteArray());
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
安卓解析 json 4种格式 全解析的更多相关文章
- C#解析JSON几种方式-整理
一.什么是JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition ...
- Ajax获取数据的几种格式和解析方式
一.什么是ajax AJAX的全称是Asynchronous JavaScript and XML(是异步的 javascript 和 XML). ajax不是新的编程语言,而是一种使用现有标准的 ...
- 23种设计模式全解析 (java版本)
转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...
- unity3d-23种设计模式全解析
http://www.jianshu.com/nb/4161593 2016.08.03 09:26 字数 1203 阅读 584评论 0喜欢 14 希望大家能共同学习,交流 谢谢支持zero(QQ: ...
- Spring-Boot-操作-Redis,三种方案全解析!
在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了,关于 Redis,松哥之前有一个系列教程,尚不了解 Redis 的小伙伴可以参考这个教程: Redis 教 ...
- Java 23种设计模式全解析
转自:http://blog.csdn.net/longyulu/article/details/9159589
- JSON解析的几种方式
在开发中,网络请求和json解析使用的频率是一样高的,因为网络请求返回来的一般都是json(当然还有xml),这里讨论的是json,网络请求的工具类前面我的博客已经写过了,这里给出网址:http:// ...
- 解析JSON的两种方法eval()和JSON.parse()
解析JSON 一种方法是使用eval函数. var dataObj = eval("("+json+")"); 必须把文本包围在括号中,这样才能避免语法错误,迫 ...
- jQuery Ajax 实例 全解析
jQuery Ajax 实例 全解析 jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我 ...
随机推荐
- 我的SQL里哪个语句占用的CPU最多?
可以使用下面的语句来得到 SELECT SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1, ( (CASE qs.statement_end_off ...
- CentOS 7 开放防火墙端口命令
CentOS 7 开放防火墙端口 命令 最近公司新的server要求用CentOS7, 发现以前CentOS 6 系列中的 iptables 相关命令不能用了,查了下,发现Centos 7使用fire ...
- 深入理解模型,视图和控制器(C#)
这篇文章向你提供ASP.NET MVC 模型,视图和控制的高度概览.换句话说,解释一下ASP.NET MVC中的 ‘M’, ‘V’, 和 ‘C’. 看完这篇文章以后,你应该就能理解ASP.NET MV ...
- 基于Sql Server 2008的分布式数据库的实践(终结)
学习.操作心得 以前在做网站程序的时候一直用的是MYSQL,但是网上搜到MYSQL不支持分布式操作,然后便开始查询MSSQL的分布式数据库的设计与操作,后来在网上找到了<基于SQL SERVER ...
- “/”应用程序中的server错误
前几天敲ASP.NET有关验证控件的样例的时候,出现了这个问题: 可是对于这个问题我们应该都不陌生,之前敲牛腩的时候也出现过,当时的解决方法是: 在web.config中找 <a ...
- 大型应用的javascript架构
来源:http://blog.leezhong.com/tech/2010/11/29/javascript-arch.html 目前很多网站基本没有明确的前端架构,大多是服务端渲染视图页,输出到浏览 ...
- HDU 4620 Fruit Ninja Extreme 暴搜
题目大意:题目就是描述的水果忍者. N表示以下共有 N种切水果的方式. M表示有M个水果需要你切. W表示两次连续连击之间最大的间隔时间. 然后下N行描述的是 N种切发 第一个数字C表示这种切法可以切 ...
- Chrome 对于 glyphicon 字体图标不显示的解决的方法
在将Chome默认字体渲染为微软雅黑后,部分字体图标显示为方框,这里Chome扩展文档提供的解决的方法为: 找到 custom.css 文件,路径为: C:\Users\(username)\App ...
- PowerMock介绍
一.为什么要使用Mock工具 在做单元测试的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,远程服务, 文件系统等等). 而我们没法控制这些外部依赖的对象,为了解 ...
- java面试第十八天
软件开发流程: 1.可行性分析 2.需求分析->开发测试 3.概要设计->分隔模块,定义框架等 4.详细设计->类设计.接口设计 5.编码 6.测试 7.部署 8.维护 单元测试: ...