总共4种json  ,    还提供了 httclient  和 httpurlconnection 2种方式获取json的方法(请把baseurl 改为可以地址比如http://www.sohu.com 不过返回来的不是json

1  简单的一个  { ,,,,}

2  里面有数组 { , [{,,},{,,}],}

3 直接一个数组

4 数组里有数组

5 其他情况? 没有吧,除非json格式不规范

主代码:

package com.example.json;

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.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种格式 全解析的更多相关文章

  1. C#解析JSON几种方式-整理

    一.什么是JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition ...

  2. Ajax获取数据的几种格式和解析方式

    一.什么是ajax  AJAX的全称是Asynchronous JavaScript and XML(是异步的 javascript 和 XML).  ajax不是新的编程语言,而是一种使用现有标准的 ...

  3. 23种设计模式全解析 (java版本)

    转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...

  4. unity3d-23种设计模式全解析

    http://www.jianshu.com/nb/4161593 2016.08.03 09:26 字数 1203 阅读 584评论 0喜欢 14 希望大家能共同学习,交流 谢谢支持zero(QQ: ...

  5. Spring-Boot-操作-Redis,三种方案全解析!

    在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了,关于 Redis,松哥之前有一个系列教程,尚不了解 Redis 的小伙伴可以参考这个教程: Redis 教 ...

  6. Java 23种设计模式全解析

    转自:http://blog.csdn.net/longyulu/article/details/9159589

  7. JSON解析的几种方式

    在开发中,网络请求和json解析使用的频率是一样高的,因为网络请求返回来的一般都是json(当然还有xml),这里讨论的是json,网络请求的工具类前面我的博客已经写过了,这里给出网址:http:// ...

  8. 解析JSON的两种方法eval()和JSON.parse()

    解析JSON 一种方法是使用eval函数. var dataObj = eval("("+json+")"); 必须把文本包围在括号中,这样才能避免语法错误,迫 ...

  9. jQuery&nbsp;Ajax&nbsp;实例&nbsp;全解析

    jQuery Ajax 实例 全解析 jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我 ...

随机推荐

  1. 浅析Linux线程调度

    在Linux中,线程是由进程来实现,线程就是轻量级进程( lightweight process ),因此在Linux中,线程的调度是按照进程的调度方式来进行调度的,也就是说线程是调度单元.Linux ...

  2. iOS开发-DatePicker控件

    时间控件不管是Android还是iOS中都是必然存在的一个控件,具体的效果大同小异,显示日期,时间,iOS中有四种方式可以选择,Time, Date,Date and Time  , Count Do ...

  3. 盘点linux系统中的12条性能调优命令。

    导读 性能调优一直是运维工程师最重要的工作之一,如果您所在的生产环境中遇到了系统响应速度慢,硬盘IO吞吐量异常,数据处理速度低于预期值的情况,又或者如CPU.内存.硬盘.网络等系统资源长期处于耗尽的状 ...

  4. (转)AssetBundle系列——游戏资源打包(二)

    转自:http://www.cnblogs.com/sifenkesi/p/3557290.html 本篇接着上一篇.上篇中说到的4步的代码分别如下所示: (1)将资源打包成assetbundle,并 ...

  5. (笔试题)删除K位数字

    题目: 现有一个 n 位数,你需要删除其中的 k 位,请问如何删除才能使得剩下的数最大? 比如当数为 2319274, k=1 时,删去 2 变成 319274 后是可能的最大值. 思路: 1.贪心算 ...

  6. Android控件之HorizontalScrollView 去掉滚动栏

    在默认情况下.HorizontalScrollView控件里面的内容在滚动的情况下,会出现滚动栏,为了去掉滚动栏.仅仅须要在<HorizontalScrollView/>里面加一句    ...

  7. CLR 之 内容概述

    第 I 部分 CLR 基础 第 1 章 CLR的执行模型 第 2 章 生成.打包.部署和管理应用程序及类型 第 3 章 共享程序集和强命名程序集 第 II 部分 设计类型 第 4 章 类型基础 第 5 ...

  8. JavaScript 之 对象和数组

    一:对象   说起对象,我们不自然就想起了面向对象中自封装的一个类,同样JS中也是遵循这个守则,在web编程中几乎天天用到的就是JSON.是的,这就是一个对象,不过这个对象下面的字段都是字符串和值类型 ...

  9. fiddler设置显示区域参数

    oSession["ui-color"] = "red"; 设置字体颜色,颜色名称oSession["ui-italic"] = " ...

  10. 解决Linux SSH登录慢

    出现ssh登录慢一般有两个原因:DNS反向解析的问题和ssh的gssapi认证 :ssh的gssapi认证问题 GSSAPI ( Generic Security Services Applicati ...