android json 解析
一、json简介
json指的是javascript对象表示法(javascript object notation),它是一种轻量级文本数据交换格式,类似于xml,但比xml更小,更快,更易解析(xml需要下载到手机端进行解析);
json是基于javascript的一个子集,它使用javascript语法来描述数据对象,但是json任然独立于语言和平台,json解析器和json库支持许多不同编程语言,同时也易于机器解析和生成;
优酷:http://v.youku.com/v_show/id_XODYzMTEwODY4.html
爱奇艺:http://www.iqiyi.com/w_19rsb9thy1.html#vfrm=5-7-4-1(涉及服务器的搭建可见视频)
二、json数据解析
1、json object(多个,也可以单个)
{"person":{"address":"上海黄浦区","id":1001,"name":"jack"}}
2、解析,一个对象,多组值,可以使用相同的语法表示多个值(每个值包含多个记录):
这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目,记录中实际的名称 / 值对可以
不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表 示数据的方式,甚至可以以不同方式表示同一事物。
{"persons":[{"address":"上海黄浦区","id":1001,"name":"jack"},{"address":"上海闵行区","id":1002,"name":"rose"},{"address":"上海黄浦区","id":1003,"name":"mick"}]}
3、解析json Array
{"listString":["北京","上海","湖南"]}
4、解析json object 和 json array 混合对象
{"listMap":[{"id":1001,"address":"北京","name":"jack"},{"id":1001,"address":"上海","name":"rose"}]}
文件目录:
activity_main.xml代码不再给出
[html]view plaincopy
publicclassMainActivityextendsActivity{
privateButtonbtn_person;
privateButtonbtn_persons;
privateButtonbtn_listString;
privateButtonbtn_listMap;
privateTextViewtv_show;
privatestaticStringPATH="http://192.168.1.100:8080/2.9/com/JsonServlet";
privatestaticfinalStringTAG="MainActivity";
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_person=(Button)findViewById(R.id.btn_person);
btn_persons=(Button)findViewById(R.id.btn_persons);
btn_listString=(Button)findViewById(R.id.btn_listString);
btn_listMap=(Button)findViewById(R.id.btn_listMap);
tv_show=(TextView)findViewById(R.id.tv_show);
btn_person.setOnClickListener(newMyButtonListenerPersion());
btn_persons.setOnClickListener(newMyButtonListenerPersions());
btn_listString.setOnClickListener(newMyButtonListenerlistString());
btn_listMap.setOnClickListener(newMyBuutonListenerlistMap());
}
classMyButtonListenerPersionimplementsOnClickListener{
@Override
publicvoidonClick(Viewv){
Stringpath2=PATH+"?action_flag=person";
StringjsonString1=HttpUtils.getJsonContent(path2);
Personperson=JsonTools.getPerson("person",jsonString1);
tv_show.setText(person.toString());
Log.i(TAG,person.toString());
}
}
classMyButtonListenerPersionsimplementsOnClickListener{
@Override
publicvoidonClick(Viewv){
Stringpath3=PATH+"?action_flag=persons";
StringjsonString2=HttpUtils.getJsonContent(path3);
List<Person>list2=JsonTools.getPersons("persons",jsonString2);
tv_show.setText(list2.toString());
Log.i(TAG,list2.toString());
}
}
classMyButtonListenerlistStringimplementsOnClickListener{
@Override
publicvoidonClick(Viewv){
Stringpath4=PATH+"?action_flag=listString";
StringjsonString3=HttpUtils.getJsonContent(path4);
List<String>list3=JsonTools.getList("listString",jsonString3);
tv_show.setText(list3.toString());
Log.i(TAG,list3.toString());
}
}
classMyBuutonListenerlistMapimplementsOnClickListener{
@Override
publicvoidonClick(Viewv){
Stringpath5=PATH+"?action_flag=listMap";
StringjsonString4=HttpUtils.getJsonContent(path5);
List<Map<String,Object>>list4=JsonTools.getListMap("listMap",jsonString4);
tv_show.setText(list4.toString());
Log.i(TAG,list4.toString());
}
}
}
/********************************************************************************************************************************************************************************/
[html]view plaincopy
publicclassPerson{
privateintid;
privateStringname;
privateStringaddress;
publicPerson(){
super();
}
publicPerson(intid,Stringname,Stringaddress){
super();
this.id=id;
this.name=name;
this.address=address;
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetAddress(){
returnaddress;
}
publicvoidsetAddress(Stringaddress){
this.address=address;
}
@Override
publicStringtoString(){
return"address="+address+",id="+id+",name="+name;
}
}
/************************************************************************************************************************************************************************************/
[html]view plaincopy
publicclassJsonTools{
publicJsonTools(){
}
/**
*获取对象数据
*@paramkey
*@paramjsonString
*@return
*/
publicstaticPersongetPerson(Stringkey,StringjsonString){
Personperson=newPerson();
try{
//构建一个JSONObjectjsontokener
JSONObjectjsonObject=newJSONObject(jsonString);
//得到JSONObject值与密钥相关,就是对象
JSONObjectpersonObject=jsonObject.getJSONObject(key);
//取得数据
person.setId(personObject.getInt("id"));
person.setName(personObject.getString("name"));
person.setAddress(personObject.getString("address"));
}catch(JSONExceptione){
e.printStackTrace();
}
returnperson;
}
/**
*获取对象数组数据
*@paramkey
*@paramjsonString
*@return
*/
publicstaticList<Person>getPersons(Stringkey,StringjsonString){
List<Person>list=newArrayList<Person>();
try{
JSONObjectjsonObject=newJSONObject(jsonString);
//返回json的数组
JSONArrayjsonArray=jsonObject.getJSONArray(key);
for(inti=0;i<jsonArray.length();i++){
JSONObjectjsonObject2=jsonArray.getJSONObject(i);
Personperson=newPerson();
person.setId(jsonObject2.getInt("id"));
person.setName(jsonObject2.getString("name"));
person.setAddress(jsonObject2.getString("address"));
list.add(person);
}
}catch(JSONExceptione){
e.printStackTrace();
}
returnlist;
}
/**
*获取String数组数据
*@paramkey
*@paramjsonString
*@return
*/
publicstaticList<String>getList(Stringkey,StringjsonString){
List<String>list=newArrayList<String>();
try{
JSONObjectjsonObject=newJSONObject(jsonString);
JSONArrayjsonArray=jsonObject.getJSONArray(key);
for(inti=0;i<jsonArray.length();i++){
Stringmsg=jsonArray.getString(i);
list.add(msg);
}
}catch(JSONExceptione){
e.printStackTrace();
}
returnlist;
}
/**
*获取对象的Map集合数据
*@paramkey
*@paramjsonString
*@return
*/
publicstaticList<Map<String,Object>>getListMap(Stringkey,StringjsonString){
List<Map<String,Object>>list=newArrayList<Map<String,Object>>();
try{
JSONObjectjsonObject=newJSONObject(jsonString);
JSONArrayjsonArray=jsonObject.getJSONArray(key);
for(inti=0;i<jsonArray.length();i++){
JSONObjectjsonObject2=jsonArray.getJSONObject(i);
Map<String,Object>map=newHashMap<String,Object>();
Iterator<String>iterator=jsonObject2.keys();
while(iterator.hasNext()){
Stringjson_key=iterator.next();
Objectjson_value=jsonObject2.get(json_key);
if(json_value==null){
json_value="";
}
map.put(json_key,json_value);
}
list.add(map);
}
}catch(JSONExceptione){
e.printStackTrace();
}
returnlist;
}
}
/************************************************************************************************************************************************************************************/
[html]view plaincopy
publicclassHttpUtils{
/*
*打开远程链接getContent
*/
publicHttpUtils(){
}
publicstaticStringgetJsonContent(Stringpath){
try{
//指定资源参数实例
URLurl=newURL(path);
//url.openConnection()指定打开一个远程资源
//HttpURLConnection抽象的Http连接方法extendsURLConnection
HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();
//在3秒内不能建立连接,将抛异常
connection.setConnectTimeout(3000);
//设置请求的命令将被发送到远程HTTP服务器。这个方法只能在连接称为。
connection.setRequestMethod("GET");
//设置标志指示是否允许输入这个URLConnection
connection.setDoInput(true);
//得到服务器返回的参数值
intcode=connection.getResponseCode();
if(code==200){
returnchangeInputStream(connection.getInputStream());
}
}catch(MalformedURLExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
returnnull;
}
/**
*将一个输入流转换成指定编码的字符串
*@paraminputStream
*@return
*/
privatestaticStringchangeInputStream(InputStreaminputStream){
StringjsonString="";
ByteArrayOutputStreamoutputStream=newByteArrayOutputStream();
intlen=0;
byte[]data=newbyte[1024];
try{
while((len=inputStream.read(data))!=-1){
outputStream.write(data,0,len);
}
jsonString=newString(outputStream.toByteArray());
}catch(IOExceptione){
e.printStackTrace();
}
returnjsonString;
}
}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。