在Android客户端与服务器交互的过程中,客户端一般采用json解析服务器的返回数据。此时有两种数据格式。但其根本都是字符串或字符串数组!

1、JSONObject

下面是PHP端代码:

<?php
$array = array(
'username'=>'lhh',
'password'=>'123456',
'user_id'=>'1'
);
echo json_encode($array);
?>

我们这里只是模拟,所以,在没有服务器的情况下,也可以在java代码中定义,如下:

String strJson = "{"username":"lhh","password":"123456","user_id":"1"}";

下面是android代码:

//by 不剃头的一休哥 2014//11/15

package com.example.jsonjs;

import java.io.BufferedReader;
import java.io.InputStreamReader; import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONObject; import android.app.Activity;
import android.os.Bundle;
import android.os.Looper;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); new Thread(new Runnable(){ @Override
public void run() {
Looper.prepare();
// TODO Auto-generated method stub
HttpClient client = new DefaultHttpClient();
StringBuilder builder = new StringBuilder();
//地址根据实际情况而定
HttpGet myget = new HttpGet("http://192.168.1.104/login.php");
try {
HttpResponse response = client.execute(myget);
BufferedReader reader = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
for (String s = reader.readLine(); s != null; s = reader.readLine()) {
builder.append(s);
}
//转化为JSONObject
JSONObject jsonObject = new JSONObject(builder.toString());
String re_username = jsonObject.getString("username");
String re_password = jsonObject.getString("password"); //setTitle("用户id_"+re_user_id);
Log.v("url response", "true="+re_username);
Log.v("url response", "true="+re_password);
//tv1.setText(re_username);
//tv2.setText(re_password);
//Toast.makeText(getApplicationContext(), re_username, Toast.LENGTH_LONG).show();
} catch (Exception e) {
Log.v("url response", "false");
// Toast.makeText(getApplicationContext(), "false", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
Looper.loop();
}}).start();
}
}

该代码需要服务器,如果是在java定义的json数据。

2、JSONArray

下面是PHP代码(我用到了数据库)

<?php
$link=mysql_connect("localhost","username","password");
mysql_query("SET NAMES utf8");
mysql_select_db("test",$link);
$sql=mysql_query("select * from teacher ",$link);
while($row=mysql_fetch_assoc($sql))
$output[]=$row;
echo json_encode($output);
mysql_close();
?>

当然也可以仿照上述在java代码中定义,如下:

String strJson = "[{"id":"1","name":"wang"},{"id":"2","name":"liu"}]";

下面是android代码:

//by 不剃头的一休哥 2014/11/15

package com.example.jsonjsarr;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset; import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; import android.app.Activity;
import android.os.Bundle;
import android.os.Looper;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Looper.prepare();
getServerJsonDataWithTypes();
Looper.loop();
}
}).start(); }
private void getServerJsonDataWithTypes() {
// TODO Auto-generated method stub int res = 0;
HttpClient client = new DefaultHttpClient();
StringBuilder str = new StringBuilder();
//此处地址根据实际情况而定
HttpGet httpGet = new HttpGet("http://192.168.1.104/login.php"); try{ HttpResponse httpRes = client.execute(httpGet);
res = httpRes.getStatusLine().getStatusCode();
if(res == 200)
{
BufferedReader buffer = new BufferedReader(new InputStreamReader(httpRes.getEntity().getContent()));
String s = buffer.readLine();
for(;s!=null;s=buffer.readLine())
{
str.append(s);
}
//字符串转化为JSONArray
JSONArray json = new JSONArray(str.toString());
String strs=" ";
for(int i = 0;i<json.length();i++)
{
//按照下标进行访问
JSONObject jsonobject = (JSONObject)json.opt(i);
strs += jsonobject.getString("name");
} Toast.makeText(getApplicationContext(), strs, Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(getApplicationContext(), "httperror", Toast.LENGTH_LONG).show();
}
}catch(Exception e){ Log.v("test", "exception");
}
} }

  

综上两种可以看出,其本质都是一样,一个JSONArray分成多个JSONObject进行操作。

顺便说下:

1、在Android 4.X中,进行网络访问时不要放在主线程里,否则APP可能会强制退出。

2、注意UI线程与非UI线程的区别。

3、Looper.prepare()与Looper.loop()的作用。

4、需要网络访问时,别忘了在mainfest里添加权限

<uses-permission android:name="android.permission.INTERNET"/>

5、小弟不才,如有错误,还请指出。

6、代码虽然是我写的,但是有问题尽量不要找我,是他自己长歪了。  

7、转载请注明出处。

_______________________________________________

utf-8无bom格式保存php文件(不要用windows自带记事本,可用notepad),否则可能导致解析错误。

Android 解析JSONObject以及JSONArray对比的更多相关文章

  1. Gson解析JsonObject和JsonArray

    Gson中重要的几个核心类: Gson.JsonParser.JsonObject.JsonArray. 下面就是解析的步骤: public void parserJsonArray(String s ...

  2. Android Bitmap 全面解析(四)图片处理效果对比 ...

    对比对象: UIL Volley 官方教程中的方法(此系列教程一里介绍的,ImageLoader的处理方法和官方的差不多) -------------------------------------- ...

  3. Android总结之json解析(FastJson Gson 对比)[申明:来源于网络]

    Android总结之json解析(FastJson Gson 对比)[申明:来源于网络] 地址:http://blog.csdn.net/u014031072/article/details/5392 ...

  4. Android 解析Json_fastJson

    FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能.   实际上其他的json处理工具都和 ...

  5. 在android解析json

    1.采用一般方式解释json为对象 package com.heimazyh.testjson; import org.json.JSONException; import org.json.JSON ...

  6. Gson基本操作,JsonObject,JsonArray,String,JavaBean,List互转

    (转自)https://www.cnblogs.com/robbinluobo/p/7217387.html String.JsonObject.JavaBean 互相转换 User user = n ...

  7. Android解析json数据

    Json数据 [{"code":"110000","sheng":"11","di":"0 ...

  8. [转]Android解析json数据

    1.json格式 2.json解析 3.gson解析 4.fastjson解析 一.Json格式 json一种轻量级的数据交换格式.在网络上传输交换数据一般用xml, json. 两种结构: 1)对象 ...

  9. Android解析Json数据之Gson解析

    Gson是谷歌官方提供的解析json数据的工具类.json数据的解析能够使用JSONObject和JSONArray配合使用解析数据,可是这样的原始的方法对于小数据的解析还是有作用的,可是陪到了复杂数 ...

随机推荐

  1. 抛出自定义异常,spring AOP事务不回滚的解决方案

    spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...

  2. codevs 1138 聪明的质监员

    二分+前缀和. #include<iostream> #include<cstdio> #include<cstring> #include<cmath> ...

  3. 用Python抓网页的注意事项

    用Python编一个抓网页的程序是非常快的,下面就是一个例子: import urllib2 html = urllib2.urlopen('http://blog.raphaelzhang.com' ...

  4. Node.js的循环依赖

    我们知道在实际编程过程中,要尽可能的减少或者规避循环依赖情况的发生.但在现实环境中,有时却不得不产生循环依赖.Node.js不提倡使用循环依赖,但真有如此情况发生时Node.js也有办法解决.这篇博文 ...

  5. SQL Server数据类型与SDE库表sde_type对照表

    SDE_column_registry 表管理所有注册列. 警告:如果使用 SQL 界面更改列定义,SDE_column_registry 表中的记录将不会更新.这可能导致之后的任何数据导出失败. S ...

  6. nested push animation can result in corrupted navigation bar

    2013-12-06 10:15:51.668 CodingForFun[4569:70b] nested push animation can result in corrupted navigat ...

  7. C# 中对WinForm窗体中的控件快速设置TableIndex次序

    点击“视图”--“Tab键顺序”,然后便可设置.

  8. 11、NFC技术:NDEF Uri格式解析

    NDEF Uri格式规范 与NDEF文本格式一样,存储在NFC标签中的Uri也有一定的格式 http://www.nfc-forum.org/specs/spec_dashboard 编写可以解析Ur ...

  9. pdm 中怎么修改表的Name值时使Code值不变

    修改方法:PowerDesign中的选项菜单里修改,在[Tool]-->[General Options]->[Dialog]->[Operating modes]->[Nam ...

  10. Delphi 关闭MDI子窗口

    需要在子窗口的onClose事件中吧Action = caFree; 就可以了. procedure Tfrm_aa.FormClose(Sender: TObject; var Action: TC ...