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配合使用解析数据,可是这样的原始的方法对于小数据的解析还是有作用的,可是陪到了复杂数 ...
随机推荐
- Web程序员最常用的11款PHP框架
PHP框架是Web程序员和开发人员最为有用的工具. PHP框架可以帮助用户更快地开发项目. 今天我将为开发人员带来几款最好的PHP框架,希望能对你有用. 1.Agavi Agavi是一款强大的,可扩展 ...
- [转] POJ数学问题
转自:http://blog.sina.com.cn/s/blog_6635898a0100magq.html 1.burnside定理,polya计数法 这个大家可以看brudildi的<组合 ...
- Need to add a caption to a jpg, python can't find the image
importImage,ImageDraw,ImageFont, os, glob list = glob.glob('*.jpg')for infile in list:print infile f ...
- 【英语】Bingo口语笔记(33) - 面部器官系列
to play by ear Play就是玩的意思.可是,play by ear的意思并不是“玩耳朵”.这个词汇的来源和音乐有关系.它原来指的是那些会弹钢琴或某种乐器,但是却不会看五线谱的人.每当他们 ...
- 【基础数学】质数,约数,分解质因数,GCD,LCM
1.质数: 质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,不能整除以其他自然数(质数),换句话说就是该数除了1和它本身以外不再有其他的因数. 2.约数: 如 ...
- Android studio gradle 打包 那些事
总结了一下 目前觉得比较好用的gradle 和一些打包 经验.放在这里. 首先说下 渠道号 这个概念,我们经常会统计我们的api 访问来源 是来自于那个app store,这有利于 我们针对性的推广. ...
- Android Volley源码分析
今天来顺手分析一下谷歌的volley http通信框架.首先从github上 下载volley的源码, 然后新建你自己的工程以后 选择import module 然后选择volley. 最后还需要更改 ...
- Jquery Mobile设计Android通讯录第二章
本文是jQuery Mobile设计Android通讯录系统教程的第二篇,在上一篇教程中(http://publish.itpub.net/a2011/0517/1191/000001191561.s ...
- android性能小贴士 翻译
转自http://developer.android.com/training/articles/perf-tips.html 性能小贴士: 这篇文档主要一些微优化可以提升应用程序性能,但是这些改变不 ...
- git command
下载github代码 git clone https://github.com/zhoug2020/2015.git 在github上创建仓库: Create a new repository on ...