一、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;

}

}



附件:http://down.51cto.com/data/2365260