Android 解析JSONObject以及JSONArray对比
在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对比的更多相关文章
- Gson解析JsonObject和JsonArray
Gson中重要的几个核心类: Gson.JsonParser.JsonObject.JsonArray. 下面就是解析的步骤: public void parserJsonArray(String s ...
- Android Bitmap 全面解析(四)图片处理效果对比 ...
对比对象: UIL Volley 官方教程中的方法(此系列教程一里介绍的,ImageLoader的处理方法和官方的差不多) -------------------------------------- ...
- Android总结之json解析(FastJson Gson 对比)[申明:来源于网络]
Android总结之json解析(FastJson Gson 对比)[申明:来源于网络] 地址:http://blog.csdn.net/u014031072/article/details/5392 ...
- Android 解析Json_fastJson
FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能. 实际上其他的json处理工具都和 ...
- 在android解析json
1.采用一般方式解释json为对象 package com.heimazyh.testjson; import org.json.JSONException; import org.json.JSON ...
- Gson基本操作,JsonObject,JsonArray,String,JavaBean,List互转
(转自)https://www.cnblogs.com/robbinluobo/p/7217387.html String.JsonObject.JavaBean 互相转换 User user = n ...
- Android解析json数据
Json数据 [{"code":"110000","sheng":"11","di":"0 ...
- [转]Android解析json数据
1.json格式 2.json解析 3.gson解析 4.fastjson解析 一.Json格式 json一种轻量级的数据交换格式.在网络上传输交换数据一般用xml, json. 两种结构: 1)对象 ...
- Android解析Json数据之Gson解析
Gson是谷歌官方提供的解析json数据的工具类.json数据的解析能够使用JSONObject和JSONArray配合使用解析数据,可是这样的原始的方法对于小数据的解析还是有作用的,可是陪到了复杂数 ...
随机推荐
- java基础:数据类型
一:基本数据类型 (1):整数类型 byte,short,int,long (2):浮点类型 float , double (3):布尔类型 boolean 注意: long 类型的变量后面要 ...
- Npoi Web 项目中(XSSFWorkbook) 导出出现无法访问已关闭的流的解决方法
原本在CS项目中用的好好的在BS项目中既然提示我导出出现无法访问已关闭的流的解决方法 比较郁闷经过研究 终于解决了先将方法发出来 让遇到此问题的筒子们以作参考 //新建类 重写Npoi流方法 publ ...
- Java RGB数组图像合成 ImageCombining (整理)
/** * Java RGB数组图像合成 ImageCombinning (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * 注意事项: * 1.本程序为java程序,同时感谢您花费 ...
- python练习程序(c100经典例12)
题目: 判断101-200之间有多少个素数,并输出所有素数. for i in range(101,201): flag=0; for j in range(2,int(i**(1.0/2))): i ...
- python编码问题(1)
一.字符编码基础 字符编码是计算机对字符的格式化,从而能够在计算机系统中存储与传输. 1.ASCII码 在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态 ...
- dede调用第一张大图,非缩略图
1.找到include/extend.func.php加入现在函数 function firstimg($str_pic) { $str_sub=substr($str_pic,0,-7)." ...
- (六)6.7 Neurons Networks whitening
PCA的过程结束后,还有一个与之相关的预处理步骤,白化(whitening) 对于输入数据之间有很强的相关性,所以用于训练数据是有很大冗余的,白化的作用就是降低输入数据的冗余,通过白化可以达到(1)降 ...
- sound tips
ASaudio&SoundAS 两个开源项目阅读: ASaudio&SoundAS 都是比较小巧的声音控制,但似乎都不能直接拿到项目只直接使用. ASaudio ASaudio的Tra ...
- mouseevent tips
关于roll_over 和 mouse_over的区别,这篇文章说明的很清楚,http://zengrong.net/post/1105.htm 全文如下: 在MouseEvent中,ROLL_OVE ...
- linux系统上Mysql数据库导入导出操作
需求:把MySQL数据库目录中的dz数据库备份到/home/dz_bak.sql ,然后再新建一个数据库dzbak,最后把/home/dz_bak.sql 导入到数据库dzbak中.操作如下:以下操作 ...